java中android_在Android中用纯Java代码布局

本文详细介绍了如何在Android应用中使用纯Java代码进行界面布局,涵盖了LayoutParameters的应用、控件ID设置、dp与px转换,以及如何实现动态布局,包括Button宽度的实时调整。
摘要由CSDN通过智能技术生成

本文的完成了参考了一篇国外的教程,在此表示感谢。

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();

}

});

}

}

效果如下图:

7aedea560f16

可以使用以下步骤在 Android Studio 实现: 1. 打开 Android Studio,创建一个新项目。 2. 在 `activity_main.xml` 使用线性布局(`LinearLayout`)添加四个按钮,代码如下: ```xml <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <Button android:id="@+id/btn1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="张三"/> <Button android:id="@+id/btn2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="李四"/> <Button android:id="@+id/btn3" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="王五"/> <Button android:id="@+id/btn4" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="赵六"/> </LinearLayout> ``` 3. 在 `MainActivity.java` ,获取四个按钮的引用,并为其一个按钮(比如 `btn1`)设置点击事件。在点击事件使用和上面相同的代码来实现随机抽取两个人的功能,并将结果展示在 `Toast` 代码如下: ```java public class MainActivity extends AppCompatActivity { private Button btn1, btn2, btn3, btn4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn1 = findViewById(R.id.btn1); btn2 = findViewById(R.id.btn2); btn3 = findViewById(R.id.btn3); btn4 = findViewById(R.id.btn4); btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 定义四个人的名字 String[] names = {"张三", "李四", "王五", "赵六"}; // 生成两个随机数,表示选出的两个人的下标 Random random = new Random(); int index1 = random.nextInt(4); int index2; do { index2 = random.nextInt(4); } while (index2 == index1); // 获取选出的两个人的名字 String selected1 = names[index1]; String selected2 = names[index2]; // 显示抽取结果 String message = "选的两个人是:" + selected1 + " 和 " + selected2; Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show(); } }); } } ``` 4. 运行程序,在点击 `btn1` 后就可以随机抽取两个人并将结果显示在 `Toast` 了。 这样就可以在 Android Studio 使用线性布局和按钮实现随机抽取两个人的功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值