三三要成為安卓糕手
一:xml中LinearLayout布局參數的使用
1:xml代碼
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="10dp"tools:context=".layout.LinearLayoutActivity"><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:hint="請輸入聯系人" /><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:hint="請輸入主題" /><EditTextandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:gravity="top"android:hint="請輸入內容" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="right"android:text="發送" /></LinearLayout>
效果展示
2:hint-提示文本
hint
是指當文本輸入框(像 EditText
)為空時顯示的提示文本。一旦用戶開始輸入內容,這個提示文本就會自動消失。
[h?nt] ——提示
3:gravity和layout_gravity的區別
android:gravity="right" //文字位置靠右
android:layout_gravity="right" //布局靠右
二:Java操控LinearLayout布局參數
1:getLayoutParams()
EditText etCont = findViewById(R.id.et_cont);LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) etCont.getLayoutParams();//強制向下轉型layoutParams.weight = 1f;
獲取LinearLayout下子控件EditText的布局參數;繼承關系如下
所以可以直接設置權重weight
2:效果
3:添加按鈕
LinearLayout root = findViewById(R.id.main);Button button = new Button(this);button.setText("test");root.addView(button);
4:給按鈕設置參數(進階)
(1)設置布局和權重
體悟:重在new布局對象這行代碼上,
LinearLayout root = findViewById(R.id.main);Button button = new Button(this);button.setText("test");LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);//寬高layoutParams.weight = 0.3f;button.setLayoutParams(layoutParams);root.addView(button);
真無語啊
三:Java實現發送郵件界面
雖然xml控制布局非常的好用,但是作為一名java開發者,用java代碼去控制布局也是需要去掌握的老弟!!
被ex到了:總結一下步驟
第一步:創建布局對象
LinearLayout linearLayout = new LinearLayout(this);
第二步:為 LinearLayout 設置布局參數(兩種方式)
匿名內部類
linearLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
創建參數
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);linearLayout.setLayoutParams(params);
1:設置父布局參數
LinearLayout linearLayout = new LinearLayout(this);ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);linearLayout.setLayoutParams(params);linearLayout.setOrientation(linearLayout.VERTICAL);linearLayout.setPadding(10,10,10,10);linearLayout.setBackgroundColor(Color.BLUE);setContentView(linearLayout);
2:setContentView()
setContentView(linearLayout)
是 Android 開發中用于設置 Activity 界面的核心方法。它的作用是將指定的視圖(如 LinearLayout
)作為當前 Activity 的主布局顯示在屏幕上。
等價寫法
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
LinearLayout.LayoutParams
繼承自ViewGroup.LayoutParams
,前者包含后者的所有功能。
3:為控價設置布局參數
//為LinearLayout設置布局ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);linearLayout.setLayoutParams(params);//為editText設置布局LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);editText.setLayoutParams(params1);
上面這兩段代碼其實本質上都是相通的,創建布局參數,控件在使用參數,妙~!
有一點需要注意:如果需要使用 LinearLayout
的特有屬性(如 weight
、gravity
),則必須使用 LinearLayout.LayoutParams
:
4:為控件還是控件中的內容設置參數
問題引入
設置了top為什么還在中間
上述圖片中比較了xml和Java中,究竟是給控件本身設置參數,還是給控件中的內容設置參數
總結一下:簡單說,前者管 “View 自己在父布局哪”,后者管 “View 內部內容擺在哪”,應用場景和作用對象有明顯區分 。
5:代碼總結
寫完難度就不大了,好桑心~~~
package com.xlong.myapplication.layout;import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;import com.xlong.myapplication.R;public class EmailActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/*** 匿名內部類設置LinearLayout的布局參數*/
// linearLayout.setLayoutParams(
// new ViewGroup.LayoutParams(
// ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));//設置父布局LinearLayoutLinearLayout linearLayout = new LinearLayout(this);ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);linearLayout.setLayoutParams(params);linearLayout.setOrientation(linearLayout.VERTICAL);linearLayout.setPadding(10,10,10,10);linearLayout.setBackgroundColor(Color.BLUE);setContentView(linearLayout);//聯系人的EditTextEditText editContact = new EditText(this);editContact.setHint("請輸入聯系人");LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);editContact.setLayoutParams(params1);//主題的EditTextEditText editSubject = new EditText(this);editSubject.setHint("請輸入主題");LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);editSubject.setLayoutParams(params2);//內容的EditTextEditText editContent = new EditText(this);editContent.setHint("請輸入內容");LinearLayout.LayoutParams params3 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);params3.weight = 1;editContent.setGravity(Gravity.TOP);editContent.setLayoutParams(params3);linearLayout.addView(editContact);linearLayout.addView(editSubject);linearLayout.addView(editContent);//設置Button的布局,看這里就是給button控件布局靠右Button button = new Button(this);button.setText("發送");LinearLayout.LayoutParams params4 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);params4.gravity = Gravity.RIGHT;button.setLayoutParams(params4);linearLayout.addView(button);}
}