2012-01-06 12 views
0

私のアプリケーション用のボタンをカスタマイズしたいと思います。アプリケーションには、ユーザーが色を選択するカラーピッカーがあり、その特定の開始/終了色をボタンに設定する必要があります。これらのコロ値は、オブジェクト「ユーティリティ」に格納されます。アンドロイド:動的値を持つカスタマイズボタン

基本的には、「ユーティリティ」オブジェクトを使用して、背景、テキストの色、フォントなどの色を設定したいと思います。また、ユーザーが色を変更したときに、それら。また、ファイルに色を保存するため、ユーザーが次にアプリケーションを起動するときに、最後に選択した色が表示されます。

xmlの色を変更することができないため、<selector>が最適なオプションではありませんでした。そのような要件に最適な選択肢は何でしょうか?

更新: @jitendra、回答から私はsomethignが役立ちました。私はGradientDrawableを使ってボタンの色を設定します。私のonCreate()アクティビティでは、ボタンのルート、テキストの色/サイズ、およびグラデーションの色の背景を設定するRefreshComponents()メソッドを呼び出します。正常に動作しますが、唯一の問題は、GradientDrawableをボタンに適用することで、2つのボタンの間のギャップが失われることです。

これはGradientDrawableを適用せずに画像です:出力GradientDrawableを適用するには enter image description here

は次のとおりです。 enter image description here

あなたは、ボタンのサイズはすべての側面から少し増加している参照してください。私が次のボタンにも当てはまると、彼らはお互いに触れる。上記のための私の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は次のとおりです。私のonCreate(中

public static GradientDrawable getButtonDrawable(Button btn) { 
    int colors[] = {getStartColor(), getEndColor()}; 
    GradientDrawable grad = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, colors); 
    grad.setCornerRadius(5f); 
    return grad; 
} 

そして最後に)、私が追加:

GradientDrawable btnGradient = Utility.getButtonDrawable(btn1); 
btn1.setBackgroundDrawable(btnGradient); 

起こっていますここで間違っている?ボタン周りの余白は0になっていますか? gradの境界を設定する必要がありますか、ボタンのLayoutParamsを再度設定する必要がありますか?

私の目標を達成するための助けに感謝します。

おかげ

+0

あなたは背景を変更しているとき、あなたのコード内でそれらのいずれかを設定している場合を除きレイアウトパラメータを更新する必要はありませんが、あなたが背景の変化にはいくつかのレイアウトパラメータを追加しているようです。 – jeet

+0

@jitendrasharma、私の次の目標は、ボタンのサイズを自動的に変更するレイアウトを動的に変更することです。見て、助けてください - http://stackoverflow.com/questions/8769491/android-retrieve-layout-marginbottom-programmatically – Tvd

+0

@jitendrasharma、私は各ボタンのLAyoutParamsを変更する予定はありません。上記はちょっとしたことだった。しかし実際にはmarginRightをボタンに追加するだけで仕事ができました。彼らが何か他のものになるはずですか、どこかで間違っているかもしれませんが、それを見つけることはできません。 – Tvd

答えて

0

は、ああ、私は解決策を得ました。

GradientDrawableがなくても、GradientDrawableを適用した後にボタンに余白があった場合、なぜデフォルトマージンが失われるのですか?追加のlayout_marginRightを追加する必要があるのはなぜですか?

まだ誰かに回答がありましたら、お知らせください。

おかげ

+0

私はあなたの更新された質問を見たことがなかったが、今私はした。なぜパディングを減らさないのですか?それは助けるかもしれません。 – Ghost

+0

@Ghost、はい、私はルートレイアウトとmarginRightボタンに多くのパディングを追加しました。しかし、GradientDrawableを実装した後にサイズが大きくなったのはなぜだろうか。ボタンや内のレイアウトのいずれかでどんなパドグインを使用していない場合は、どこでそれを減らすのですか? – Tvd

+0

申し訳ありませんその点に気付かなかった。まあ、私はよく分かりません。あなたはもっと研究しなければならないだろうと思います。 – Ghost

0

アンドロイドはThemes and Stylesを持っていますが、彼らは、開発時の機能で、実行時に操作することはできません。ただし、事前定義されたさまざまなテーマを実行時に適用できます。

固定ビューのプロパティ(色、フォントなど)で定義済みのテーマを設定し、実行時にテーマを選択するオプションをユーザに与えることができます。

しかし、すべての特定のビュープロパティを変更する必要がある場合は、独自の「テーマ」システムをロールする必要があります。つまり、ビューを作成するたびにプロパティをどこかに格納して適用する必要があります。

+0

定義済みテーマも許可されていません。すべてのものが純粋なダイナミックである - ユーザーが選択したもの - バックグラウンド、2つのグラデーションカラー、テキストカラーなど。あなたのポイントregにもっと集中することができますか? – Tvd

+0

@Tvd:あなたのアプリや一般的なアンドロイドで「定義済みのテーマは許可されていません」という意味ですか?私のアプリケーションで –

+0

。前述のように、ユーザの選択に基づいてすべてが動的になるため、Predefinedにはスペースがありません。 – Tvd

1

JavaファイルでStateListDrawableオブジェクトを動的に作成し、アプリケーションコンポーネントのバックグラウンドとソースとして設定できます。

+0

StateListDrawableを使用する代わりに、GradientDrawableで作業を試しました。ボタンのサイズは変更されます。私の更新された質問を見てください。 – Tvd

0

Tvd!私はPeter KnegoとJitender Sharmaに同意します。さらに、あなたのボタンにはsetOnClickListenerがあり、すべてのボタンに割り当てられたsetOnClickListenerメソッド内にあるコードで色を変えることができます。これに加えて、color.xmlファイルとカスタムテーマを設定する必要があります。やるべきことがたくさんあります。私は本当にどちらが最善の方法であるかは分かりません。私はあなたに私がprevious answerで提供したアンドロイド学習のものを通過することを強くお勧めします。彼らだけがあなたに詳細な洞察力と先進的なアイデアを与えることができます。ではごきげんよう!私はボタンにlayout_marginRight属性を追加し、それが仕事をした

+0

実行時に "colors.xml"を編集できますか?何も動作しない場合は、各アクティビティのonCreateメソッド(私は推測する)にコードを記述しなければなりません。ここで、ユーティリティオブジェクトに保存されているプロパティに基づいてすべてのプロパティを設定します。 btn1.setTextColor(Utility.getTextColor())のようにします。あなたが以前の答えで提供した学習物は、すべて本を買うためのリンクを含んでいます。 – Tvd

+0

@Tvd:実行時にリソースファイルを編集しません(colors.xmlなど)。 –

+1

@Tvd:Googleだけでそれらの本を検索します。彼らはすべて無料でダウンロードできます。それが私がダウンロードした方法です。それらがどこにも見つからない場合は、あなたが安全だと感じたら私にメールIDを提供してください。私はそれらをあなたに郵送します。リソースの変更に関しては、実行時には実行できません。あなたがそれをするなら、それは役に立たない。 – Ghost

関連する問題