#android #user-interface #button #styles #user-experience
#Android #пользовательский интерфейс #кнопка #стили #пользовательский интерфейс
Вопрос:
Я пытаюсь разработать приложение для Android с пользовательским интерфейсом, управляемым кнопками. Это означает, что есть несколько кнопок с разными цветами и значками, и каждая из них выполняет свою задачу.
Я пытался реализовать это с помощью стандартных и пользовательских кнопок, но у них не было приятного пользовательского интерфейса, и они не поддерживают значки внутри них.
Я пробовал с fabs, но fabs не предназначены для этой цели, и я ищу что-то слегка округлое, больше похожее на это:
Это было бы идеально, потому что кнопки цветные, квадратные с закругленными краями, они содержат значок, и под ними есть надпись.
Любой совет / пример для воспроизведения такого же вида представления? Для цвета вам просто нужно выбрать из палитры светлый и темный варианты. Поместить текстовую метку под кнопкой довольно просто, но я понятия не имею, как закодировать в XML что-то подобное.
Ответ №1:
На вашем месте я бы сделал это так
Вот расположение кнопок. ic_baseline_folder_24 — это векторный ресурс, созданный с помощью Android Studio
<LinearLayout
android:id="@ id/folder_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@drawable/bg_image_button"
android:padding="12dp"
android:src="@drawable/ic_baseline_folder_24" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Folders"
android:textColor="#CCC" />
</LinearLayout>
bg_image_button.xml определяется следующим образом. Его можно расширить для поддержки разных состояний:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape >
<solid android:color="#7B0800"/>
<corners android:radius="8dp" />
</shape>
</item>
</selector>
Наконец, установите обработчик действия щелчка:
val binding = ActivityMainBinding.inflate(layoutInflater)
binding.folderButton.setOnClickListener {
// do something
}
Это приводит к следующему:
Комментарии:
1. Спасибо! Есть ли способ программно изменить цвет фона изображения?
2. @AndreaCioccarelli Изменение цвета фона здесь требует, чтобы вы изменили цвет фона вашего объекта рисования, в данном случае bg_image_button.xml . Это несколько строк кода, которые вам нужно выполнять каждый раз, когда вы хотите, чтобы это произошло. И давайте не будем забывать, что вам нужно создать так много таких XML-файлов, чтобы в вашем меню были разные цвета. В этом случае лучшим решением будет решение, которое я предоставил, и CardView, поскольку вы можете изменить цвет фона с помощью одной простой строки: CardView.setBackgroundColor(цвет); И это не повлияет на другие пункты меню.
3. Цвет фона можно изменить программно, используя
setBackgroundResource(int resId)
различные фоновые XML-ресурсы. Если для просмотра изображения требуются разные состояния, такие как отключено, нажато, активировано, я считаю, что это проще. Если изменение состояний не требуется, решение SlothCoding тоже работает хорошо.4. Спасибо вам обоим. Это было очень полезно и просто 🙂
Ответ №2:
Что бы я сделал, так это. Я использовал CardView для создания кнопки с закругленными краями. CardView великолепен и прост в использовании, и позже вы можете легко изменить все, что захотите.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@ id/btn_settings"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:layout_height="wrap_content">
<androidx.cardview.widget.CardView
android:layout_width="100dp"
android:layout_height="100dp"
app:cardCornerRadius="20dp"
app:cardBackgroundColor="@android:color/holo_blue_bright">
<ImageView
android:layout_width="52dp"
android:layout_height="52dp"
android:src="@drawable/ic_settings"
android:layout_gravity="center"/>
</androidx.cardview.widget.CardView>
<TextView
android:layout_gravity="center_horizontal"
android:textSize="20sp"
android:textColor="@android:color/black"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Settings" />
</LinearLayout>
С помощью этого кода вы получаете это:
Теперь просто в вашем коде введите:
LinearLayout btn_settings = findViewById(R.id.btn_settings);
btn_settings.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//do something
}
});
Теперь просто внутри onClick введите свой код для обработки нажатий на кнопку. Создайте больше подобных макетов и добавьте их в любой вид, который вы хотите. Просмотр сетки, повторный просмотр и т. Д. Для создания большего количества кнопок, как на вашей фотографии, И обработки кликов для каждой из них.