相对布局(RelativeLayout)
RelativeLayout中往往需要定義每一個控件的資源ID
layout_toLeftOf ? ? ?layout_toRightOf ? ?layout_below表示相對位置
layout_alignXXX表示對齊方式
layout_marginXXX表示間距
android:layout_centerInParent="true":將控件放置于父界面的中心位置
即子控件的位置可以取決于兄弟控件或者父控件的位置,與LinearLayout相比,減少嵌套使用,界面代碼簡潔.
實例代碼 : (下列代碼效果是由以中間的控件為參照物來定位的)
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Java"android:layout_centerInParent="true"android:textSize="30sp"android:textColor="#F000"android:id="@+id/textView_center" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="左上"android:textSize="30sp"android:id="@+id/textView_left_top"android:layout_above="@+id/textView_center"android:layout_alignParentStart="true"android:layout_marginBottom="60dp"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="右上"android:textSize="30sp"android:id="@+id/textView_right_top"android:layout_alignTop="@+id/textView_left_top"android:layout_alignParentEnd="true" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="左下"android:textSize="30sp"android:id="@+id/textView_left_bottom"android:layout_below="@+id/textView_center"android:layout_alignParentStart="true"android:layout_marginTop="86dp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="右下"android:textSize="30sp"android:id="@+id/textView_right_bottom"android:layout_alignTop="@+id/textView_left_bottom"android:layout_alignParentEnd="true" /> </RelativeLayout>(2)也可以通過拖拽操作完成想要的效果
相對布局的屬性:
android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentBottom="true" android:layout_alignParentTop="true" | 與相對11111布局的對其方式 有四個方向 |
android:layout_alignBottom="@+id/button1" android:layout_alignTop="@+id/button1" android:layout_alignLeft="@+id/button1" android:layout_alignRight="@+id/button1" | 與button1組件的對其方式 |
android:layout_toRightOf="@+id/button1" android:layout_toLeftOf="@+id/button1" android:layout_above="@+id/button1" android:layout_below="@+id/button1" | 在button1組件的那個位置 |
android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:layout_centerInParent="true" | 在相對布局中的對其方式 |
android:layout_alignBaseline="@+id/button1" | 組件的文字底部與button1的文字的底部對其 |
組件之間不能相互依賴,不然會出錯 |
相對布局的實例
<1>前端設計
:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="20sp"android:id="@+id/textView_userName"android:layout_alignParentTop="true"android:layout_alignParentStart="true"android:layout_marginTop="70dp"android:text="請輸入用戶名:" /><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="20sp"android:layout_toRightOf="@+id/textView_userName"android:layout_alignBottom="@+id/textView_userName"android:id="@+id/edit_userName"android:text="請輸入用戶名" />/><TextViewandroid:id="@+id/textView_password"android:layout_height="wrap_content"android:layout_width="wrap_content"android:text="請輸入 密碼:"android:textSize="20sp"android:layout_below="@+id/textView_userName"android:layout_marginTop="50dp"/><EditTextandroid:id="@+id/edit_password"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="請輸入密碼"android:textSize="20sp"android:layout_alignBottom="@+id/textView_password"android:layout_toRightOf="@+id/textView_password"/><Buttonandroid:id="@+id/button_login"android:layout_height="wrap_content"android:layout_width="wrap_content"android:text="登錄"android:layout_centerVertical="true"android:layout_toStartOf="@+id/button_reset"android:textSize="20sp"/><Buttonandroid:id="@+id/button_reset"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignTop="@+id/button_login"android:layout_toEndOf="@+id/textView_password"android:layout_marginLeft="50dp"android:text="重置"android:textSize="20sp"/> </RelativeLayout><2>后臺邏輯
package com.example.relativelayout_demo;import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast;/*** 給按鈕添加單擊事件*/ public class MainActivity extends AppCompatActivity {private EditText editText_userName;private EditText editText_userPassword;private Button button_login;private Button button_reset;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.relative_login);this.initView();}/*** 初始化控件*/private void initView() {this.editText_userName = (EditText) this.findViewById(R.id.edit_userName);this.editText_userPassword = (EditText) this.findViewById(R.id.edit_password);this.button_login = (Button) this.findViewById(R.id.button_login);this.button_reset = (Button) this.findViewById(R.id.button_reset);this.button_login.setOnClickListener(new View.OnClickListener(){/*** 當用戶點擊登錄按鈕時自動調節的方法* @param v*/@Overridepublic void onClick(View v){//如何在內部類中訪問外部類對象?類名.thisString userName = MainActivity.this.editText_userName.getText().toString().trim();//判斷用戶名是否輸入if(TextUtils.isEmpty(userName)){editText_userName.setError("用戶名必須輸入");editText_userName.requestFocus();return;}editText_userPassword.requestFocus();/*"admin".equals(userName)和userName.equals("admin")有什么區別?使用equals時,必須考慮null(空值)的問題當userName = null(1)"admin"equals(null) ==>false(2)null.equals("admin") ==>拋空指針異常為什么會報空指針(NullPointerException)異常? 當對象沒有賦值或者說值為null 時調用任何方法都是報空指針異常System.out.println(userName.equals("admin"));*/if("admin".equals(userName)){/*如何在內部類中訪問外部類的成員變量?方式1:外部類對象.外部類成員變量方式2:外部類成員變量*/String pwd = editText_userPassword.getText().toString().trim();if(TextUtils.isEmpty(pwd)){editText_userPassword.setError("密碼必須輸入");editText_userPassword.requestFocus();return;}//用戶名正確if("123".equals(pwd)){//密碼正確Toast.makeText(MainActivity.this, userName+"登錄成功", Toast.LENGTH_SHORT).show();}else{//密碼錯誤editText_userPassword.setText(null);editText_userPassword.requestFocus();Toast.makeText(MainActivity.this, "密碼["+pwd+"]錯誤!", Toast.LENGTH_SHORT).show();}}else{//用戶名錯誤editText_userName.setText(null);editText_userName.requestFocus();Toast.makeText(MainActivity.this, "用戶名["+userName+"]錯誤!", Toast.LENGTH_SHORT).show();}}});this.button_reset = (Button) this.findViewById(R.id.button_reset);this.button_reset.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {editText_userName.setText(null);editText_userPassword.setText(null);editText_userName.requestFocus();}});} }總結
以上是生活随笔為你收集整理的相对布局(RelativeLayout)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可转债t0交易一天可以几次
- 下一篇: 线性布局与相对布局的嵌套