1

Androidでカスタムボタンを作成しようとしています。このボタンは、レイアウトから使用すると、次のように見える XML を介してパラメーターを受け取ることができます。

customimagebutton:src="@drawable/my_button_image"

次に、ボタン (xml で定義) と連携するクラスを実装しました。そのクラスでは、渡されたパラメーターを読み取ることができますが、ここに問題があります。

上記のリソースを渡すと、パスとして渡されます。

"//res/drawable-xhdpi/my_button_image.png"

このパスを使用して、イメージを ImageView に設定します。問題は、リソースへの有効なハンドルを取得できないように見えることです。私が試してみました

 getResources().getIdentifier( <full path or just the name, with and without .png>, "drawable, null);

しかし、それは常に0を返します。そして、私はUriを作成しようとしました

"android.resource://<the path>"

とにかくImageViewはそれを表示したくありません。API を間違った方法で使用しているかどうかを知っている人はいますか?

4

3 に答える 3

2

以下の行を使用して、リソースからビットマップを取得できます。

BitmapFactory.decodeResource(getResources(), R.drawable.my_button_image);

以下の行を使用して画像を直接設定し、残りをシステムに任せることができます

setImageResource( R.drawable.my_button_image);

編集

getResources() : Android リソース システムは、アプリケーションに関連付けられたすべての非コード アセットを追跡します。Resources クラスを使用して、アプリケーションのリソースにアクセスできます。通常、アプリケーションに関連付けられた Resources インスタンスは getResources() で取得できます。

R.drawable.my_button_image : Android SDK ツールは、ビルド時にアプリケーションのリソースをアプリケーション バイナリにコンパイルします。リソースを使用するには、ソース ツリー (プロジェクトの res/ ディレクトリ内) に正しくインストールし、アプリケーションをビルドする必要があります。ビルド プロセスの一環として、SDK ツールは各リソースのシンボルを生成します。これをアプリケーション コードで使用してリソースにアクセスできます。if you are using Eclipse then , your project is builded automatically

于 2013-09-06T16:39:27.377 に答える
0

私は解決策を思いつきました。主なエラーは、getIdentifier に適切なパッケージを取得できなかったことだと思います。

ここにいくつかのソースがあります(一部を削除する必要があったため、軽微なエラーがある可能性があります)。

私のカスタムボタン(Java):

public class CustomImageButton extends RelativeLayout
{
...

    public CustomImageButton(Context context, AttributeSet attrs)
    {
        super(context, attrs);

        LayoutInflater inf = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inf.inflate( <my_xml_file> , this, true);

        TypedArray arr = context.obtainStyledAttributes(attrs, R.styleable.CustomImageButton);
        CharSequence imageSrc = arr.getString(R.styleable.CustomImageButton_src);
        if (imageSrc != null)
        {
            String fileName = new File("" + imageSrc).getName();
            fileName = fileName.substring(0, fileName.indexOf("."));

            int resId = getResources().getIdentifier(fileName, "drawable", <my_top_level_package_very_important_to_get_right>);
            ImageButton button = ((ImageButton) findViewById(R.id.buttonImage));

            button.setImageDrawable(getResources().getDrawable(resId));
        }
    }

...
}

attrs.xml では、上記の「src」が使用されます。

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <declare-styleable name="CustomImageButton">
        <attr name="src" format="string" />
    </declare-styleable>
...
</resources>

次に、レイアウト xml から使用できます。「xmlns:customimagebutton」に注意してください。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:customimagebutton="http://schemas.android.com/apk/res-auto"
....>

    <my.package.custom.MyCustomButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        customimagebutton:src="@drawable/my_image" />

</RelativeLayout>
于 2013-11-15T09:02:48.290 に答える