Intereting Posts
Настройка EditText с помощью «url» inputType Android Studio не компилируется при использовании устаревшего API Как указать действия, которые предназначены только для телефонов или планшетов на Android Какова наилучшая практика для размещения классов под именами пакетов в Android Почему OnClickListener в ViewHolder не работает? Поддельное местоположение и скорость в эмуляторе. KML или GPX? Я получаю только пустой белый экран при использовании svg-android Есть ли способ поместить поле EditText / input в виджетов рабочего стола? Xamarin Forms Android App Crashes запускает отладочную версию с помощью эмулятора VS Android Как получить «сетевое» время (из параметра «Автоматический» под названием «Использовать сетевые значения»), а не время на телефоне? Только эмулятор ошибки ACCESS_FINE_LOCATION Ссылка build.gradle атрибут versionName в макете xml Как проверить наличие датчика GPS? Android – TimePicker минут до 15 Интерфейс тестирования роботизированного Android с Teamcity

Вкладки Android SlidingTabs с круглыми углами

Я использую SlidingTabs для создания двух вкладок. Пользовательский интерфейс вкладки должен выглядеть следующим образом:

Когда выбрана первая вкладка Пользовательский интерфейс SlidingTab

Когда выбрана вторая вкладка. SlidingTab UI 2

(Обратите внимание на прямые углы синего прямоугольника)

Я использую следующий селектор для создания пользовательского интерфейса, показанного выше.

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Active tab --> <item android:state_selected="true" android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/round_corner_rectangle" /> <!-- Inactive tab --> <item android:state_selected="false" android:state_focused="false" android:state_pressed="false" android:drawable="@android:color/transparent" /> <!-- Pressed tab --> <item android:state_pressed="true" android:state_selected="true" android:drawable="@drawable/round_corner_rectangle" /> <item android:state_pressed="true" android:state_selected="false" android:drawable="@color/transparent" /> <!-- Selected tab (using d-pad) --> <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@android:color/transparent" /> </selector> 

Код round_corner_rectangle выглядит следующим образом:

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="5dp"/> <solid android:color="@color/login_background" /> </shape> 

login_background – темно-синий цвет. Используя приведенный выше код, я получаю следующее:

UI 1UI 2

Я могу, конечно, удалить corner элемент из round_corner_rectangle чтобы получить синий синий фон прямо, а не раунд. Если я сделаю правую сторону синего прямоугольника прямо, когда выбрана другая вкладка, прямоугольник закругляется с другой стороны.

Что я должен сделать, чтобы получить пользовательский интерфейс, как показано на первом изображении?

Обновление: – Как вы можете видеть из моего кода, у меня нет проблем при создании круглых углов, проблема связана с прямыми углами на выбранной вкладке. Если я просто добавляю круглые углы, когда выбрана вторая вкладка, углы округляются с другой стороны.

Solutions Collecting From Web of "Вкладки Android SlidingTabs с круглыми углами"

Ок, в первую очередь, просто создайте этот простой прямоугольник с возможностью рисования xml. И не беспокойтесь о углах, которые мы собираемся создать в динамическом режиме.

tabbackground.xml

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="your_color" /> <size android:height="40dp" /> </shape> 

Теперь, когда вы меняете вкладку. Вы должны извлекать позицию выбранной вкладки с помощью прослушивателей в выбранной переменной TabPosition. Я не пишу полный код, просто давая вам скелет

 if (selectedTabPosition == 0) { // that means first tab GradientDrawable drawable = (GradientDrawable) getResources().getDrawable(R.drawable.tabbackground); drawable.setCornerRadii(new float[]{30,30,0,0,0,0,30,30}); // this will create the corner radious to left side } else if (selectedTabPosition == your_total_tabcount) { // that menas it's a last tab GradientDrawable drawable = (GradientDrawable) getResources().getDrawable(R.drawable.tabbackground); drawable.setCornerRadii(new float[]{0,0,30,30,30,30,0,0}); // this will create the corner radious to right side } else { // you don't have to worry about it. it is only used if you have more then 2 tab. means for all middle tabs GradientDrawable drawable = (GradientDrawable) getResources().getDrawable(R.drawable.tabbackground); drawable.setCornerRadii(new float[]{0,0,0,0,0,0,0,0}); // this will remove all corner radious } // and at last don't forget to set this drawable. 

Это то, что я пробовал при нажатии кнопки

Введите описание изображения здесь

Введите описание изображения здесь

Используйте этот xml и A / c для изменения радиуса. Используется для заданного угла как закругленная форма

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <corners android:topLeftRadius="5dp" android:topRightRadius="5dp" android:bottomLeftRadius="5dp" android:bottomRightRadius="5dp" /> <solid android:color="#134F4D" /> <size android:width="270dp" android:height="60dp" /> </shape> 

Этот код отлично работает на Android 4.0 и выше и даст вам результат, о котором вы упомянули, и не судите код с предварительным просмотром в Android Studio.

 <?xml version="1.0" encoding="utf-8"?> 

 <item> <shape> <solid android:angle="270.0" android:color="#5C83AF" /> <corners android:topLeftRadius="8dp" android:bottomLeftRadius="8dp"/> </shape> </item> 

Изменить 1: Еще одно решение вашей проблемы можно решить, используя 9-патч-образ.

Изменить 2: https://github.com/hoang8f/android-segmented-control

Ваша левая вкладка (кнопка) в xml:

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:width="0dp" android:color="@color/transparent" /> <!-- you can add multiple colors --> <gradient android:startColor="@color/your_start_color" android:endColor="@color/your_end_color" /> <corners android:topLeftRadius="10dp" android:topRightRadius="0.1dp" android:bottomLeftRadius="10dp" android:bottomRightRadius="0.1dp" /> </shape> 

Для правой вкладки (кнопки) изменить ее следующим образом:

 <corners android:topLeftRadius="0.1dp" android:topRightRadius="10dp" android:bottomLeftRadius="0.1dp" android:bottomRightRadius="10dp" /> 

И использовать его в своем селекторе xml.

Вы пытались сделать свой синий синий прямоугольник со всеми прямыми углами и просто сделать ваши бежевые углы для перекрытия прямоугольника, так что прямые углы не будут видны? Это должно заставить работать, как вы хотите.

Сделать бежевые углы перекрывать синим прямоугольником

Другое возможное решение – использовать какую-то стороннюю библиотеку, например

https://github.com/hoang8f/android-segmented-control

Вы также можете захотеть проверить этот сайт, чтобы найти библиотеки:

https://android-arsenal.com/

Вы должны попробовать эту библиотеку https://github.com/hoang8f/android-segmented-control .

Его легко настроить, и легко установить выбранные и не выбранные состояния.

Используйте следующий код в файле rounded_corner.xml в папке с возможностью переноса

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="50dp" /> <stroke android:width="5px" android:color="#1a1a1a" /> </shape> 

И используйте следующий файл activity_main.xml

 <Button android:id="@+id/btnCodeInput" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:background="@drawable/rounded_corner" android:text="CodeInput" /> 

это оно