admin 管理员组文章数量: 1184232
在Android中用纯Java代码布局
感谢大佬:
在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和edittextmyButton = new Button(this);myButton.setText("Press me");myEditText = new EditText(this);myEditText.setHint("See me");//为空间设置IDmyButton.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转化为pxResources 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() {@Overridepublic void onClick(View v) {//点击Button之后使其宽度变宽,再次点击恢复之前的wrap_content状态,可以配合属性动画使其变化更加自然if (!clicked) {myButton.getLayoutParams().width = 800;} else {myButton.getLayoutParams().width = wrapWidth;}clicked = !clicked;myButton.requestLayout();}});}
}
效果如下图:
本文标签: 在Android中用纯Java代码布局
版权声明:本文标题:在Android中用纯Java代码布局 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.roclinux.cn/p/1698029606a283523.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论