3

(Android 2.1 以降の場合は java/xml)

スタイルを使用してボタンを作成しています:

<style name="MainButton">
    <item name="android:textColor">#000000</item>
    <item name="android:text">test</item>
    <item name="android:drawableRight">@drawable/ic_launcher</item>
    <item name="android:drawablePadding">10dip</item>
    <item name="android:paddingLeft">10dip</item>
</style>

たとえば、次のように、(Java コードから) テキストを変更できることを知っています。

Button but = (Button)findViewById(R.id.button2);
    but.setText(Html.fromHtml("<b>" + "title" + "</b>" +  "<br />" + 
            "<small>" + "description" + "</small>" + "<br />" + 
            "<small>" + "DateAdded" + "</small>"));

それは非常によく見えますが、Javaコードからそのボタン内のドローアブルオブジェクトを変更するにはどうすればよいですか?

「button.setBackgroundResource();」は使いたくない 方法。

何か案は?:>

4

4 に答える 4

0

同じ属性で別のxmlを作成しますが、「@drawable/」リソースを変更します。onclickメソッドで、ボタンのバックグラウンドリソースをこの新しいxmlに設定します

于 2013-03-08T12:17:23.617 に答える
0

カスタムセレクターが欲しいと思います

カスタムセレクターを作成し、xmlで描画可能なリソースとして設定します。

例:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" 
        android:drawable="@drawable/cell_top_selected" />
    <item android:drawable="@drawable/cell_top" />
</selector>

このステートメントを使用する

yourbutton.setSelected(true)  // for selection image
yourbutton.setSelected(false) // for alternate image

あなたがこれをしたくない場合

   I dont want to use "button.setBackgroundResource();" method.

setBackGround Resouceを使用したくない場合は、

代わりにTextViewを使用してください。ButtonのスーパークラスはTextViewです。デフォルトでは、TextViewには背景の描画可能なリソースがありません。

于 2013-03-08T12:17:30.567 に答える
0
    button.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom);

リソース ID またはドローアブルのいずれかを使用できます

于 2013-03-08T12:19:47.910 に答える
0

質問を正しく理解していて、ボタンを完全に変更して独自のボタンを描画したい場合は、独自のボタンを作成する必要があります。これを行うには、新しいクラスを作成し、それを Button で拡張してから、View クラスの onDraw() メソッドをオーバーライドします。このメソッドでは、背景、テキスト、境界線など、好きなものを描くことができます。

例えば

class NewButton extends Button{
    protected void onDraw (Canvas canvas){
    //Draw here
    }
}

これが役立つことを願っています。

于 2013-03-08T12:23:31.463 に答える