NumberPickerコンポーネントウィジェットを使用したいのですが、代わりにデフォルトのHoloテーマでは、スタイリングのデフォルトの色である青色をオレンジに置き換える必要があります。青色と数字の色を置き換え、コンポーネントのすべての機能を維持するにはどうすればよいですか? ありがとう
Library/res/drawable-*/numberpicker_selection_divider.9.pngのコピーを作成し、たとえばcustom_np_sd.9.pngのように名前を付けます。
アクティビティテーマを介してデフォルトのNumberPickerスタイルをオーバーライドします。
<style name="AppTheme" parent="@style/Holo.Theme">
<item name="numberPickerStyle">@style/CustomNPStyle</item>
</style>
<style name="CustomNPStyle" parent="@style/Holo.NumberPicker">
<item name="selectionDivider">@drawable/custom_np_sd</item>
</style>
そして、@ style/AppThemeをアクティビティテーマとして適用します。
残念ながら、スタイルを設定することはできません。 NumberPicker
のスタイルとスタイリング属性はパブリックAPIに存在しないため、それらを設定してデフォルトの外観を変更することはできません。明るいテーマと暗いテーマのみを選択できます。
解決策として、代わりに Android-numberpicker libraryを使用することをお勧めします。ライブラリは基本的にAndroidソースコードから抽出されたNumberPickerのポートです。しかし、それよりも優れています。また、NumberPicker
をAndroid 2 .x。ライブラリは簡単にスタイル設定できます。
仕切りのスタイルを設定するには、NPWidget.Holo.NumberPicker
スタイルとそのselectionDivider
およびselectionDividerHeight
属性。
テキストのスタイルを調整するには、NPWidget.Holo.EditText.NumberPickerInputText
スタイル。
<NumberPicker
Android:id="@+id/np"
Android:layout_width="40dp"
Android:layout_height="40dp"
Android:layout_centerHorizontal="true"
Android:background="@drawable/drawablenp"
Android:layout_centerVertical="true"></NumberPicker>
描画可能なフォルダーに背景を作成する
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle">
<gradient
Android:startColor="#707070"
Android:centerColor="#f8f8f8"
Android:endColor="#707070"
Android:angle="270"/>
</shape>
私もこの問題に直面しています、私はリフレクトを使用してスタイルを変更します
public class MyNumberPicker extends NumberPicker {
public MyNumberPicker(Context context) {
super(context);
setNumberPickerDivider();
}
public MyNumberPicker(Context context, AttributeSet attrs) {
super(context, attrs);
setNumberPickerDivider();
}
public MyNumberPicker(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setNumberPickerDivider();
}
@RequiresApi(api = Build.VERSION_CODES.Lollipop)
public MyNumberPicker(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
setNumberPickerDivider();
}
@Override
public void addView(View child) {
super.addView(child);
updateView(child);
}
@Override
public void addView(View child, int index, Android.view.ViewGroup.LayoutParams params) {
super.addView(child, index, params);
updateView(child);
}
@Override
public void addView(View child, Android.view.ViewGroup.LayoutParams params) {
super.addView(child, params);
updateView(child);
}
public void updateView(View view) {
if (view instanceof EditText) {
EditText et = (EditText) view;
et.setTextColor(ContextCompat.getColor(getContext(), R.color.font_content));
et.setTextSize(16);
}
}
private void setNumberPickerDivider() {
try {
{
Field field = NumberPicker.class.getDeclaredField("mSelectionDivider");
field.setAccessible(true);
field.set(this, ContextCompat.getDrawable(getContext(), R.drawable.horizontal_divider));
}
{
Field field = NumberPicker.class.getDeclaredField("mSelectionDividerHeight");
field.setAccessible(true);
field.set(this, 1);
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
私もこの問題に直面しました。 Nice NumberPicker
UIが本当に欲しいです。この質問の答えはすべて機能しましたが、非常に限られていました。私は自分のRecylerView
を作成して、必要なNumberPicker
を作成します。どうやら非常に堅牢なきちんとしたライブラリが見つかりました。こちらがリンクです https://github.com/Carbs0126/NumberPickerView
ここで質問に答えようとはしていません。私と同じ問題を抱えている人を助けたいだけです。