4

幅が「180dp」のウィジェットがあります。ユーザーがウィジェットのボタンをクリックしたときにアクティビティを表示したいのですが、アクティビティの幅はウィジェットの幅と等しくなければなりません。単純なようですが、解決できませんでした。これらの 3 つの方法の少なくとも
1つが役立つと思いますが、そうではありません。
2- Intent.getSourceBounds().getWidth() によって AppWidgetProvider onReceive() メソッドで ウィジェットの寸法を取得し、Activity の onAttachedToWindow() で使用します 。

@Override
public void onReceive(Context context, Intent intent) {

            ...
            int mWidgetHeight = intent.getSourceBounds().height();
            int mWidgetWidth = intent.getSourceBounds().width();
            ...
            App.setmWidgetHeight(mWidgetHeight);
            App.setmWidgetWidth(mWidgetWidth);
            ...

    }

活動中:

@Override
public void onAttachedToWindow() {

        View view = getWindow().getDecorView();
        WindowManager.LayoutParams lp = (LayoutParams) view.getLayoutParams();
        lp.gravity = Gravity.LEFT | Gravity.TOP;

        super.onAttachedToWindow();
        ...

        lp.width = App.getmWidgetWidth();
        lp.height = App.getmWidgetHeight();
        ...
        getWindowManager().updateViewLayout(view, lp);
    }     

この場合、エミュレータでアプリをテストすると、アクティビティの幅はウィジェットの幅の約半分になります。
3-「180 dp」をピクセルに変更します。

@Override
public void onAttachedToWindow() {

    View view = getWindow().getDecorView();
    WindowManager.LayoutParams lp = (LayoutParams) view.getLayoutParams();
    lp.gravity = Gravity.LEFT | Gravity.TOP;
    ...
    super.onAttachedToWindow();
    ...
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    float xDpi = metrics.xdpi;
    float yDpi = metrics.ydpi;
    ...
    lp.width = (int) (180 * (xDpi / 160)) ;
    lp.height = (int) (120 * (yDpi / 160));
    ...
    getWindowManager().updateViewLayout(view, lp);
}     

この場合、エミュレータでは問題ないように見えますが、デバイス (GalaxyTab 2.3.3) では、アクティビティの幅がウィジェットの幅の約 (2/3) になっています。
要約すると、これが私の質問です。
ウィジェットの寸法が dp の場合、Activity の寸法をそれとまったく同じに設定するにはどうすればよいですか?

4

1 に答える 1

-1

試す

DisplayMetrics metrics = getApplication().getApplicationContext().getResources().getDisplayMetrics();
metrics.widthPixels
metrics.heightPixels

好奇心から - アクティビティの正確なサイズを設定する必要があるのはなぜですか? android:layout_width="fill_parent" および android:layout_height="fill_parent" を使用したレイアウトは、サイズに関係なく、ウィジェット内の使用可能なすべてのスペースを使用します。

于 2013-06-04T16:29:04.647 に答える