Androidアプリの一部として、ボタンセットを作成しています。ボタンは、入れ子になったLinearLayoutsのセットの一部です。重みを使用すると、親である親LinearLayoutのサイズに基づいて自動的にサイズを変更するセットがあります。アイデアは、ピクセル数と画面の密度に基づいて、含まれるレイアウトのサイズをピクセル数に設定することです。その変更に基づいてボタンのサイズを変更します。
問題は、レイアウトのサイズを変更する方法です。
私はいくつかの提案されたテクニックを試しましたが、どれも機能しません。ボタンセットを作成するXMLのサブセットを次に示します。
<LinearLayout Android:layout_height="104pt" Android:id="@+id/numberPadLayout" Android:orientation="horizontal" Android:layout_width="104pt"
Android:background="#a0a0a0"
Android:layout_alignParentBottom="true"
Android:layout_centerHorizontal="true"
>
<LinearLayout Android:layout_weight="2" Android:layout_height="fill_parent" Android:id="@+id/linearLayout1" Android:orientation="vertical" Android:layout_width="wrap_content">
<Button Android:text="1" Android:id="@+id/button1" Android:layout_weight="2" Android:layout_width="fill_parent" Android:layout_height="wrap_content"></Button>
<Button Android:text="4" Android:id="@+id/button4" Android:layout_weight="2" Android:layout_width="fill_parent" Android:layout_height="wrap_content"></Button>
<Button Android:text="7" Android:id="@+id/button7" Android:layout_weight="2" Android:layout_width="fill_parent" Android:layout_height="wrap_content"></Button>
<Button Android:text="-" Android:id="@+id/buttonDash" Android:layout_weight="2" Android:layout_width="fill_parent" Android:layout_height="wrap_content"></Button>
</LinearLayout>
<LinearLayout Android:layout_weight="2" Android:layout_height="fill_parent" Android:id="@+id/linearLayout2" Android:orientation="vertical" Android:layout_width="wrap_content">
<Button Android:text="2" Android:id="@+id/button2" Android:layout_weight="2" Android:layout_width="fill_parent" Android:layout_height="wrap_content"></Button>
<Button Android:text="5" Android:id="@+id/button5" Android:layout_weight="2" Android:layout_width="fill_parent" Android:layout_height="wrap_content"></Button>
<Button Android:text="8" Android:id="@+id/button8" Android:layout_weight="2" Android:layout_width="fill_parent" Android:layout_height="wrap_content"></Button>
<Button Android:text="0" Android:id="@+id/button0" Android:layout_weight="2" Android:layout_width="fill_parent" Android:layout_height="wrap_content"></Button>
</LinearLayout>
<LinearLayout Android:layout_weight="2" Android:layout_height="fill_parent" Android:id="@+id/linearLayout3" Android:orientation="vertical" Android:layout_width="wrap_content">
<Button Android:text="3" Android:id="@+id/button3" Android:layout_weight="2" Android:layout_width="fill_parent" Android:layout_height="wrap_content"></Button>
<Button Android:text="6" Android:id="@+id/button6" Android:layout_weight="2" Android:layout_width="fill_parent" Android:layout_height="wrap_content"></Button>
<Button Android:text="9" Android:id="@+id/button9" Android:layout_weight="2" Android:layout_width="fill_parent" Android:layout_height="wrap_content"></Button>
<Button Android:text="." Android:id="@+id/buttonDot" Android:layout_weight="2" Android:layout_width="fill_parent" Android:layout_height="wrap_content"></Button>
</LinearLayout>
<LinearLayout Android:layout_weight="2" Android:layout_height="fill_parent" Android:id="@+id/linearLayout4" Android:orientation="vertical" Android:layout_width="wrap_content">
<Button Android:text="/" Android:id="@+id/buttonBack" Android:layout_weight="2" Android:layout_width="fill_parent" Android:layout_height="wrap_content"></Button>
<Button Android:text="\" Android:id="@+id/buttonEnter" Android:layout_weight="2" Android:layout_width="fill_parent" Android:layout_height="wrap_content"></Button>
</LinearLayout>
</LinearLayout>
2つの質問は次のとおりです。1)JavaからnumberPadLayoutにアクセスするにはどうすればよいですか。そして、ビューにアクセスしたら、2)レイアウトの高さと幅を変更するにはどうすればよいですか。
任意の提案をいただければ幸いです。
これは動作するはずです:
// Gets linearlayout
LinearLayout layout = findViewById(R.id.numberPadLayout);
// Gets the layout params that will allow you to resize the layout
LayoutParams params = layout.getLayoutParams();
// Changes the height and width to the specified *pixels*
params.height = 100;
params.width = 100;
layout.setLayoutParams(params);
ディップをピクセルに変換する場合は、これを使用します:
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, <HEIGHT>, getResources().getDisplayMetrics());
私のサンプルコード
wv = (WebView) findViewById(R.id.mywebview);
wv.getLayoutParams().height = LayoutParams.MATCH_PARENT; // LayoutParams: Android.view.ViewGroup.LayoutParams
// wv.getLayoutParams().height = LayoutParams.WRAP_CONTENT;
wv.requestLayout();//It is necesary to refresh the screen
次のコードを使用して、呼び出されたレイアウトの実際の高さを取得できます。
public int getLayoutSize() {
// Get the layout id
final LinearLayout root = (LinearLayout) findViewById(R.id.mainroot);
final AtomicInteger layoutHeight = new AtomicInteger();
root.post(new Runnable() {
public void run() {
Rect rect = new Rect();
Window win = getWindow(); // Get the Window
win.getDecorView().getWindowVisibleDisplayFrame(rect);
// Get the height of Status Bar
int statusBarHeight = rect.top;
// Get the height occupied by the decoration contents
int contentViewTop = win.findViewById(Window.ID_Android_CONTENT).getTop();
// Calculate titleBarHeight by deducting statusBarHeight from contentViewTop
int titleBarHeight = contentViewTop - statusBarHeight;
Log.i("MY", "titleHeight = " + titleBarHeight + " statusHeight = " + statusBarHeight + " contentViewTop = " + contentViewTop);
// By now we got the height of titleBar & statusBar
// Now lets get the screen size
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int screenHeight = metrics.heightPixels;
int screenWidth = metrics.widthPixels;
Log.i("MY", "Actual Screen Height = " + screenHeight + " Width = " + screenWidth);
// Now calculate the height that our layout can be set
// If you know that your application doesn't have statusBar added, then don't add here also. Same applies to application bar also
layoutHeight.set(screenHeight - (titleBarHeight + statusBarHeight));
Log.i("MY", "Layout Height = " + layoutHeight);
// Lastly, set the height of the layout
FrameLayout.LayoutParams rootParams = (FrameLayout.LayoutParams)root.getLayoutParams();
rootParams.height = layoutHeight.get();
root.setLayoutParams(rootParams);
}
});
return layoutHeight.get();
}
LinearLayout YOUR_LinearLayout =(LinearLayout)findViewById(R.id.YOUR_LinearLayout)
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
/*width*/ ViewGroup.LayoutParams.MATCH_PARENT,
/*height*/ 100,
/*weight*/ 1.0f
);
YOUR_LinearLayout.setLayoutParams(param);