Android中的五種布局
a. Frameayout: (堆棧布局) 布局中的View都會以層疊方式顯示
b. LinearLayout: (線性布局) 將多個View水平或垂直排列
c. RelativeLayout: (相對布局) 可以通過確定兩個或多個組件的相對位置來擺放組件
d. TableLayout: (表格布局) 將View按表格形式排列
e. AbsoluteLayout: (絕對布局) 可以設置View的絕對坐標(無法適應屏幕分辨率變化)
ps: 谷歌約束控件(ConstraintLayout)扁平化布局
xmlns:android ="http://schemas.android.com/apk/res/android" 中的xmlns:android是什么意思,它的值可以任意設置嗎?
xmlns:android是XML文件中的命名空間,為了防止屬性沖突采章,它的值不允許任意設
置。xmlns:android的值必須以"http://schemas.android.com/apk/res/" 開頭歹袁,后面的部分表示定義屬性的R.java文件所在的包名。
LinearLayout能不能實現(xiàn)水平方向的左對齊、居中對齊和右對齊混巧?
不行萤捆,當LinearLayout設置orientation=“horizontal”時裙品,其layout_gravity屬性只有在垂直(如bottom、center_vertical等)方向的值才起作用俗或。
ps: 最方便的方法是使用FrameLayout
如何獲取LinearLayout的寬度和高度
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearlayout);
// measure 方法的參數(shù)值都設為0即可
linearlayout.measure(0, 0);
int width = linearlayout.getMeasureWidth();
int height = linearlayout.getMeasureHeight();
或
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearlayout);
int width = linearlayout.getLayoutParams().width;
int height = linearlayout.getLayoutParams().height;
在RelativeLayout布局中可以設置標簽的android:layout_toLeftOf市怎、android:layout_toRightOf等屬性確定組件的相對位置,那么如何使用Java代碼來完成這些工作辛慰?
RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.relativelayout);
Button button = (Button) getLayoutInflater().inflate(R.layout.button, null);
// 創(chuàng)建一個LayoutParams對象
RelativeLayout.LayoutParams layoutParams =
new RelativeLayout.LayoutParams(ViewGroup.LayoutpParams.WRAP_CONTENT,
ViewGroup.LayoutpParams.WRAP_CONTENT);
// 設置android:layout_below屬性
layoutParams.addRule(RelativeLayout.BELOW, R.id.button1);
// 設置android:layout_centerInParent屬性
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
button.setLayoutParams(layoutParams);
relativelayout.addView(button);
如何將當前界面的可視組件以同樣的相對位置和大小保存在png圖像文件中(截圖)区匠?
View view = getLayoutInfater().inflate(R.layout.main, null);
// 打開圖像緩存
view.setDrawingCacheEnabled(true);
// 必須要調(diào)用measure和layout方法才能成功保存截圖文件
// 測量View的大小
view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
// 發(fā)送位置和尺寸到View及其所有的子View
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
try{
// 獲取可視化組件的截圖
Bitmap bitmap = view.getDrawingCache();
// 將截圖保存在SD卡根目錄的test.png圖像文件中
FileOutputStream fos = new FileOutputStream("/sdcard/test.png");
// 將Bitmap對象中的圖像數(shù)據(jù)壓縮成png格式的圖像數(shù)據(jù)
bitmap.compress(CompressFormat.PNG, 100, fos);
fos.close();
}catch(Exception e){
}
android:padding屬性和android:layout_margin屬性的區(qū)別是什么?
android:padding是用于設置View中的內(nèi)容距View邊緣的距離(內(nèi)邊距)帅腌,而android:layout_margin屬于用于設置View距離其他View或父容器邊緣的距離(外邊距)驰弄。
android:gravity屬性和android:layout_gravity屬性的區(qū)別是什么?
android:gravity指定了View中內(nèi)容的位置速客,android:layout_gravity指定了當前View在父View中的位置戚篙。