प्रदान किए गए उत्तरों में से कोई भी सही नहीं है।
आप प्रोग्राम को स्टाइल सेट कर सकते हैं।
संक्षिप्त उत्तर http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/content/Context.java#435 पर एक नज़र डालें
लंबा जवाब। यहाँ मेरे स्निपेट को आपके दृष्टिकोण के अनुसार कस्टम परिभाषित शैली सेट करने के लिए दिया गया है:
1) अपनी style.xml फ़ाइल में एक शैली बनाएँ
<style name="MyStyle">
<item name="customTextColor">#39445B</item>
<item name="customDividerColor">#8D5AA8</item>
</style>
Attrs.xml फ़ाइल में अपनी कस्टम विशेषताओं को परिभाषित करना न भूलें
मेरी attrsl.xml फ़ाइल:
<declare-styleable name="CustomWidget">
<attr name="customTextColor" format="color" />
<attr name="customDividerColor" format="color" />
</declare-styleable>
ध्यान दें कि आप अपनी शैली के लिए किसी भी नाम का उपयोग कर सकते हैं (मेरा CustomWidget)
अब शैली को विजेट पर सेट करने देता है
public class StyleableWidget extends LinearLayout {
private final StyleLoader styleLoader = new StyleLoader();
private TextView textView;
private View divider;
public StyleableWidget(Context context) {
super(context);
init();
}
private void init() {
inflate(getContext(), R.layout.widget_styleable, this);
textView = (TextView) findViewById(R.id.text_view);
divider = findViewById(R.id.divider);
setOrientation(VERTICAL);
}
protected void apply(StyleLoader.StyleAttrs styleAttrs) {
textView.setTextColor(styleAttrs.textColor);
divider.setBackgroundColor(styleAttrs.dividerColor);
}
public void setStyle(@StyleRes int style) {
apply(styleLoader.load(getContext(), style));
}
}
लेआउट:
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="22sp"
android:layout_gravity="center"
android:text="@string/styleble_title" />
<View
android:id="@+id/divider"
android:layout_width="match_parent"
android:layout_height="1dp"/>
</merge>
और अंत में स्टाइललॉडर वर्ग कार्यान्वयन
public class StyleLoader {
public StyleLoader() {
}
public static class StyleAttrs {
public int textColor;
public int dividerColor;
}
public StyleAttrs load(Context context, @StyleRes int styleResId) {
final TypedArray styledAttributes = context.obtainStyledAttributes(styleResId, R.styleable.CustomWidget);
return load(styledAttributes);
}
@NonNull
private StyleAttrs load(TypedArray styledAttributes) {
StyleAttrs styleAttrs = new StyleAttrs();
try {
styleAttrs.textColor = styledAttributes.getColor(R.styleable.CustomWidget_customTextColor, 0);
styleAttrs.dividerColor = styledAttributes.getColor(R.styleable.CustomWidget_customDividerColor, 0);
} finally {
styledAttributes.recycle();
}
return styleAttrs;
}
}
आप पूरी तरह से काम करने के उदाहरण https://github.com/Defuera/SetStylableProgramatically पर देख सकते हैं