0

これが私のButton

convertView = mInflater.inflate(R.layout.guide_view_image_item, null);
viewHolder = new ViewHolder();
viewHolder.myButton = (Button) convertView.findViewById(R.id.btn_goto_loginview);

中身guide_view_image_item.xml付きはこちらbtn_goto_loginview

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:gravity="center"
              android:orientation="vertical" >

    <ImageView
            android:id="@+id/imgView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/ic_delete" >

    </ImageView>

    <Button
            android:id="@+id/btn_goto_loginview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/skep_button_in_guide_page"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"/>

</RelativeLayout>

skep_button_in_guide_page は 182*182 PNG (32 ビット カラー) 6.10Kb 画像です

私のプログラムは正常に動作しますが、myButton が大きすぎます!(私の ScreenWidth は 480 で、このボタンの幅は私の ScreenWidth の半分をカバーしています)

それから私は使用します

RelativeLayout.LayoutParams myButtonLayout = (RelativeLayout.LayoutParams) viewHolder.myButton.getLayoutParams();

myButtonLayout.width&の両方myButtonLayout.heightが -2 に等しいことがわかりました。おそらく WRAP_CONTENT を意味していると思います。それから私は使用します

BitmapFactory.Options buttonOptions = new BitmapFactory.Options();
imageOptions.inJustDecodeBounds = true;
BitmapFactory.decodeResource(EngageApp.getIns().getResources(), R.drawable.skep_button_normal, buttonOptions);

次に、buttonOptions.outWidth&buttonOptions.outHeight両方が 273 に等しいことがわかったので、画面に表示されるのは実際の (実際の) 幅だと思います。奇妙なことに、273 はどこから来たのですか? それは182である必要があります..

最後に、これを使用する必要があります。

RelativeLayout.LayoutParams myButtonLayout = (RelativeLayout.LayoutParams) viewHolder.myButton.getLayoutParams();
myButtonLayout.width = 182;
myButtonLayout.height = 182;
viewHolder.myButton.setLayoutParams(myButtonLayout);

幅と高さを 182 に設定する

次に、すべて問題ありません。myButton が小さくなりました。これが私の正確な目的です。しかし、それがこの問題を解決する正しい方法だとは思いません。

誰でも私を助けることができますか?? 前もって感謝します。


私の説明はわかりにくいかもしれませんが、もっと明確にしましょう。

まず、私の画像は 182 幅で、WRAP_CONTENT を使用しています。なぜ私のボタンは 480 幅の画面に 182 幅で直接表示されないのですか。

次に、「decodeResource」を使用すると 273 になったのはなぜですか? 273 は画像の幅ではありませんが (182 は、この数字がどこから来たのかさえわかりません)、ボタンが実際に表示している幅です。これを説明してください。

4

1 に答える 1

1

182 に強制するのは間違っていますが、レイアウト パラメータの設定に問題はありません。幅が 480 の場合は 182 です。幅が 320 に変更された場合、または 720 を試してみてください。

private void getTheDisplay() {

        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        width = dm.widthPixels;
        hieght = dm.heightPixels;
    }



RelativeLayout.LayoutParams myButtonLayout = (RelativeLayout.LayoutParams) viewHolder.myButton.getLayoutParams();
myButtonLayout.width = ((182*width)/480);  //---got the ratio 182/480 and got the exact width for other screen size as well
myButtonLayout.height = ((182*height)/854);
viewHolder.myButton.setLayoutParams(myButtonLayout);

画面サイズごとに自動的に拡大します

コメントで質問に答えるには

273 の幅は、ピクセルから dp への変換に由来します。これがどのように機能するかです。

表示されるサイズ = (画像の実際のサイズ * 画面のピクセル密度) /160

あなたの場合は (182*240)/160=273 です

于 2013-06-25T12:18:39.560 に答える