위젯의 너비가 "180dp"입니다. 사용자가 위젯의 버튼을 클릭 할 때 활동을 표시하고 활동의 너비가 위젯의 너비와 같아야합니다. 간단하지만 난 해결할 수 없습니다. . 나는이 세 가지 방법 중 적어도 하나는 나를 도울 것이라고 생각하지만, 그렇지 않습니다.
1- 매니 페스트에서 활동의 크기를 정확하게 "180dp"로 설정하지만 "android : width"와 같은 속성을 찾을 수 없습니다. 매니페스트의 액티비티 태그입니다. .
2-은 intent.getSourceBounds()에 의해 의 AppWidgetProvider, onReceive() 메소드 년대 getWidth() 위젯 크기를 얻기 및 활동의 onAttachedToWindow()에 사용 :
의 AppWidgetProvider 물 :Android 위젯 크기?
@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);
}
, 내가 에뮬레이터에서 내 응용 프로그램을 테스트, 활동의 폭은 AB에 위젯 너비의 반쪽.
-3- 픽셀에 "180 DP 변경": 2/3 (이때
@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)에서 활동의 폭은 약에) 위젯의 너비.
요약하면 이것은 내 질문입니다.
위젯의 크기가 dp 인 경우 Activity의 크기를 정확하게 설정하는 방법은 무엇입니까?