java中android_在Android中用纯Java代码布局
本文的完成了參考了一篇國外的教程,在此表示感謝。
Android中的界面布局主要有兩種方式,一種是xml文件和Java代碼結合的布局方式,一種是完全依靠Java代碼布局。
兩種布局方式的比較
對于第一種方式,大多數人都比較熟悉,在這里就不細說了。這種方式的好處包括代碼的解耦,圖形化的布局界面,清晰明了,布局完后可以立馬得到反饋,還有xml格式自身帶來的優點。
對于第二種方式它最大的好處就是可以在運行的過程中動態地改變界面,用xml的布局是靜態的。并且對于xml布局中的大部分屬性都有相對應的Java方法來進行設置。
好,下面開始看怎么用Java代碼布局
關于Layout Parameters
Layout Parameters決定了你的view相對于父view和兄弟view的位置,我們通常通過ViewGroup.LayoutParams來進行設置
關于ID
我們在用xml布局的時候有時候需要設置好ID,比如相對布局設置位置的時候要根據ID來設置,同樣,在Java布局方式中有setId方法和getId方法來進行設置和獲取。
關于dp和px
為了達到更好的顯示效果,我們在xml布局的時候通常會采用dp作為單位,來設置控件的大小,但是在Java代碼中,我們的方法接收傳入參數是按照px來設置的,所以如果你想設置某控件的寬度為200dp,那么,你需要提前把它轉化為px單位下的寬度,然后再進行設置。
更加詳細的內容在代碼中進行了展示,配合有詳細的注解說明。
import android.app.Activity;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
public class OnlyJavaLayoutActivity extends Activity {
private boolean clicked = false;
private Button myButton;
private EditText myEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//定義兩個控件,button和edittext
myButton = new Button(this);
myButton.setText("Press me");
myEditText = new EditText(this);
myEditText.setHint("See me");
//為空間設置ID
myButton.setId(1);
myEditText.setId(2);
//定義好父容器并設置相關屬性
RelativeLayout myLayout = new RelativeLayout(this);
myLayout.setBackgroundColor(Color.BLUE);
//設置Button的布局參數
RelativeLayout.LayoutParams buttonParams =
new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
buttonParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
buttonParams.addRule(RelativeLayout.CENTER_VERTICAL);
//設置EditText的布局參數
RelativeLayout.LayoutParams textParams =
new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
textParams.addRule(RelativeLayout.ABOVE, myButton.getId());
textParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
textParams.setMargins(0, 0, 0, 80);//這里的80是px
//設置EditText的寬度為指定大小寬度,要相應的dp轉化為px
Resources r = getResources();
int px = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 200, r.getDisplayMetrics());
myEditText.setWidth(px);
//將布局添加到父容器中
myLayout.addView(myButton, buttonParams);
myLayout.addView(myEditText, textParams);
//設置顯示父容器
setContentView(myLayout);
//為Button設置點擊事件,點擊使其變寬
final int wrapWidth = myButton.getLayoutParams().width;
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//點擊Button之后使其寬度變寬,再次點擊恢復之前的wrap_content狀態,可以配合屬性動畫使其變化更加自然
if (!clicked) {
myButton.getLayoutParams().width = 800;
} else {
myButton.getLayoutParams().width = wrapWidth;
}
clicked = !clicked;
myButton.requestLayout();
}
});
}
}
效果如下圖:
總結
以上是生活随笔為你收集整理的java中android_在Android中用纯Java代码布局的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英语语法---主语详解
- 下一篇: 英语语法---谓语详解