2016-10-09 9 views
0

私はアプリケーションで行として使用しているxmlのビューをいくつか作成しました。すべてのビューは全く同じプロパティを持ちます。 例:アンドロイドで複数のビューの背景を同時に変更する方法

<View 
     android:layout_width="match_parent" 
     android:layout_height="2dp" 
     android:background="#000" /> 

私はアプリが開くと同時に、すべてのこれらのビューの色を変更したいです。 idを作成してからjavaでfindviewbyidを使用すると、効率的ではありません。これを達成する最良の方法は何ですか? 私はいつも同じ色にして欲しいです。

+0

'idsを作成してからjavaでfindviewbyidを使用すると、それほど効率的ではありません。なぜ効率的ではないのですか? 'ListView'とその' divider'を使ってみてください – nandsito

答えて

0

説明したような色の変化するアニメーションを作成することができないため、これはAndroidにXMLショートカットがありません。さて、あなたがJavaを使用している間にクリーンなコードの点で "効率"を望むなら、コードでJava注釈を使用してビューをバインドするためのライブラリButterknifeをご覧ください。これにより、コードが宣言的になり、findViewByIdの使用を避けることができます。

依存

は、プロジェクトのbuild.gradleファイルに追加します。

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 

あなたのアプリケーションの下に追加build.gradle file;

compile 'com.jakewharton:butterknife:8.4.0' 
apt 'com.jakewharton:butterknife-compiler:8.4.0' 

活動(またはビューまたは断片)で

私たちは私たちの活動をバインドすることを要求しますButterknifeバインドビューを作成するには、のonCreateは良い場所です。次に、Butterknifeにビューをバインドするフィールドを追加します。この場合、ビューのリストとしてバインドしますが、ビューを1つずつバインドすることもできます。次に、この例の背景を変更します。

public class MyActivity extends Activity { 
    @BindViews({R.id.view1, R.id.view2, R.id.view3}) 
    List<View> views; 

    public void onCreate(...) { 
     ... 
     setContentView(...); 
     Butterknife.bind(this); 

     for(View v : views) { 
      v.setBackgroundColor(ContextCompat.getColor(this, R.color.colorAccent)); 
     } 
    } 
} 

また、ビューを区別する必要がある場合は、リスト内に表示する必要はありません。

public class MyActivity extends Activity { 
    @BindView(R.id.view1) 
    View view1; 
    @BindView(R.id.view2) 
    View view2; 
    @BindView(R.id.view3) 
    View view3; 

    public void onCreate(...) { 
     ... 
     setContentView(...); 
     Butterknife.bind(this); 

     view1.setBackgroundColor(ContextCompat.getColor(this, R.color.color1)); 
     view2.setBackgroundColor(ContextCompat.getColor(this, R.color.color2)); 
     view3.setBackgroundColor(ContextCompat.getColor(this, R.color.color3)); 
    } 
} 
関連する問題