2012-05-17 20 views
8

フレームワーククラスの1つを拡張するカスタムビューがあります。 AndroidのほとんどのViewには、(Buttonがクリック可能で、android:clickable="true"によって設定されているなどの)いくつかのデフォルト属性が定義されています。Android:カスタムビューのデフォルト属性

カスタムビューにアプリケーション全体のデフォルトを提供するにはどうすればよいですか?

+0

http://stackoverflow.com/questions/2695646/declaring-a-custom-android-ui-element-using-xml – Ixx

+0

私はカスタム属性を定義する方法については問いません。私はすでにそれをしています。私が望むのは、いくつかの追加のプロパティを設定することなく、ビューをレイアウトファイルに追加できるように、それらの属性に対して**デフォルト**を定義することです。 – Karakuri

答えて

12

私は以下のようなものを自分自身の問題を解決:

のres /値/ attrs.xml

<resources> 
    <attr name="customViewStyle" type="reference" /> 
</resources> 

のres /値/のstyles.xml

<resources> 
    <style name="AppTheme" parent="@android:style/Theme.Light"> 
     <item name="android:background">@drawable/bg_light</item> 
     <item name="customViewStyle">@style/CustomView</item> 
    </style> 

    <style name="CustomView"> 
     <item name="android:clickable">true</item> 
     <item name="android:focusable">true</item> 
     <item name="android:focusableInTouchMode">true</item> 
    </style> 
</resources> 

を次にAppThemeにマニフェストのテーマを設定するだけです。これは、AppThemeの定義にcustomViewStyleの代わりにandroid:[widget]Styleを使用する標準ウィジェットでも機能します。

+2

これはどのようにあなたのビューに適用されますか? customViewStyleはViewの実装にどこにリンクされていますか? – cottonBallPaws

+1

@cottonBallPaws、私は正しい方向に私を指摘:http://stackoverflow.com/a/31505624/5166250 – Travis

1

さらに、このレイアウトのスタイルを作成し、ビューを使用するスタイルを設定することもできます。

ソース:http://developer.android.com/guide/topics/resources/style-resource.html

+2

スタイルタグを使うのはレイアウトファイルの個々の属性を設定するためのショートカットです。これは私が達成しようとしているものではありません。私はいくつかのデフォルトの外観/属性を持っていたいと思うし、私のカスタムビューを使用している人はそれをさらに変更するためにスタイルタグを使うことができます。 このように考える:TextViewをレイアウトに追加すると、スタイルやその他のものを指定する必要がないため、テキストのサイズ、テキストの色などのデフォルト値がどこかから来なければなりません。あなたが参照したり変更したりするアトリビュートは、それらのデフォルトよりも適用されます。 – Karakuri

0

私はあなたがAttributeSet引数を取るビューのコンストラクタをオーバーライドし、スーパークラスのコンストラクタに渡すために、独自の修正属性セットを構築する必要がありますだと思います。

EDIT:簡単にでも、あなたのViewサブクラスコンストラクタでsetClickableなどを呼び出して、デフォルトに変更してください。

+3

これは私が元来行ったことです。問題は、他の開発者が自分のカスタムビューを使用してxmlにclickable = "false"を入れた場合、 'setClickable()'を呼び出すことでプログラミングが損なわれることです。 (ユーザーが何かをやった後で、チェックボックスをチェックした後でしかクリック可能にならないかもしれない) **私はそれがクリック可能であると期待していますが、そうでないかもしれないので、私はいくつかのデフォルトを提供したいと思いますそのような内部呼び出しに頼ることなく動作します。それ以外の場合は、attrsで定義したカスタム属性だけでなく、ビューのすべての属性を読み取る方法が必要です。 – Karakuri

関連する問題