Я хочу настроить кнопки для моего приложения. Приложение имеет выбор цвета, в котором пользователь будет выбирать цвет, и я должен установить этот цвет начала/конца для кнопок. Эти значения colro будут храниться в объекте «Утилита».android: Пользовательская кнопка с динамическими значениями
В основном от начала, я хочу использовать объект «Утилита» для установки цветов для фона, цвета текста, шрифта и т. Д. И снова, когда цвет изменяется пользователем, я должен изменить его на кнопки и обновить их. А также для сохранения цветов в файле, поэтому в следующий раз, когда пользователь запустит приложение, он отображает последний выбранный цвет.
Я не мог найти <selector>
, чтобы быть лучшим вариантом, так как я не смогу изменить цвет в xml. Что может быть лучшим вариантом для такого требования?
ОБНОВЛЕНИЯ: @jitendra, из вашего ответа я получил некоторое полезное значение. Я использую GradientDrawable для установки цветов моих кнопок. В моем onCreate() Activity я вызываю метод RefreshComponents(), который устанавливает фон корня, цвет текста/размер кнопок и цвета градиента кнопок. Он работает нормально, но единственная проблема, которую я вижу, - это применение GradientDrawable к кнопке, что разрыв между двумя кнопками теряется.
Это изображение без применения GradientDrawable:
Применив GradientDrawable выход является:
Вы видите размер кнопки увеличивается немного со всех сторон. Если я применим и к следующей кнопке, они оба касаются друг друга. Мой XML для выше:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainroot" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="vertical"
android:paddingTop="35dip" android:paddingBottom="35dip"
android:paddingLeft="35dip" android:paddingRight="35dip"android:gravity="center" >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainrow1" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:orientation="horizontal"
android:layout_marginBottom="15dip" android:gravity="center_horizontal" >
<Button android:text="Accounting" android:id="@+id/accBtn" android:layout_width="80dip" style="@style/TileButtonStyle" />
<Button android:text="Data" android:id="@+id/dataBtn" android:layout_width="80dip" android:layout_height="fill_parent"></Button>
<Button android:text="Information" android:id="@+id/infoBtn" android:layout_width="80dip" android:layout_height="fill_parent" android:ellipsize="end"></Button>
</LinearLayout>
..... Other lineasr layout with same parameters as above child
И GradientDrawable, что я создаю это:
public static GradientDrawable getButtonDrawable(Button btn) {
int colors[] = {getStartColor(), getEndColor()};
GradientDrawable grad = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, colors);
grad.setCornerRadius(5f);
return grad;
}
И, наконец, в моем OnCreate(), я добавляю:
GradientDrawable btnGradient = Utility.getButtonDrawable(btn1);
btn1.setBackgroundDrawable(btnGradient);
Что происходит Неправильно здесь? Является ли маржа вокруг кнопки 0? Должен ли я устанавливать границы для градиента или снова устанавливать LayoutParams для кнопки?
Любая помощь с благодарностью поможет мне достичь своей цели.
Благодаря
вам не нужно обновлять параметры макета, если вы устанавливаете любой из них в коде, когда вы меняете фон, но это, кажется, вы добавляете некоторые параметры макета на изменение фона. – jeet
@jitendrasharma, моя следующая цель - динамически изменять размер макета, который должен автоматически изменять размеры кнопок. Посмотрите и попробуйте помочь - http://stackoverflow.com/questions/8769491/android-retrieve-layout-marginbottom-programmatically – Tvd
@jitendrasharma, я не планирую менять LAyoutParams каждой кнопки. Выше было всего лишь точка. Но на самом деле добавление marginRight к кнопкам выполняло только работу. Удивление их должно быть чем-то другим, или я могу ошибаться где-то, но не могу его найти. – Tvd