您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
82_采用代码编写ui
发布时间:2021-03-25 17:33:48编辑:雪饮阅读()
以xml为主进行布局
假设要实现一个简单的布局,上面一个TextView,下面一个EditText,那么传统的以xml为主进行实现布局则如
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:layout_width="match_parent"
android:layout_height="20dip"/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:layout_width="match_parent"
android:layout_height="20dip"/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
然后逻辑MainActivity.java如:
package com.example.codeui;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
最后部署到设备中大概如
以代码为主实现ui布局
在某些特殊情况下需要以代码来实现布局,比如listview进行渲染时候,要对listview的每个内部ui进行布局处理时候。
那么当前这个布局若用代码来实现,则与上面的xml则没有任何关系了,都可以直接删除掉那个xml文件了。
那么具体逻辑MainActivity.java如:
package com.example.codeui;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//(1)建立androidx.constraintlayout.widget.ConstraintLayout标签
ConstraintLayout cl=new ConstraintLayout(this);
//参数1 layout_width,参数2layout_height
ConstraintLayout.LayoutParams clp=new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT,ConstraintLayout.LayoutParams.MATCH_PARENT);
new ConstraintLayout.LayoutParams(clp);
//(2)建立LinearLayout标签
LinearLayout ll = new LinearLayout(this);
//设置线性为垂直线性
ll.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
ll.setLayoutParams(params);
//(3)建立TextView标签
TextView tv = new TextView(this);
tv.setText("代码实现的ui");
//参数1 layout_width,参数2layout_height
ViewGroup.LayoutParams vlp=new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
tv.setLayoutParams(vlp);
//(4)建立EditText标签
EditText et = new EditText(this);
//由于这里要设置具体的EditText的高度,但是这里ViewGroup.LayoutParams的第二个参数高度,
//必须是ViewGroup.LayoutParams的静态final常量如ViewGroup.LayoutParams.MATCH_PARENT等
//或者是像素值即px,但是我们的xml中是使用的dip,所以这里使用了下面定义的一个dip转px的方法,根据具体设备来实现动态的px,那么也就相当于使用了dip
ViewGroup.LayoutParams vlp2=new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,dip2px(this,20));
et.setLayoutParams(vlp2);
//(5)闭合标签,生成整个结构
ll.addView(tv);
ll.addView(et);
cl.addView(ll);
//(6)设置内容布局
setContentView(cl);
}
private int dip2px(Context context, float dipValue)
{
Resources r = context.getResources();
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, r.getDisplayMetrics());
}
}
然后部署到设备上如
其实吧,在上面的addView中是可以有三个参数的,当有三个参数时,第一个参数是子view,后两个参数分别是宽和高。
所以上面的整个逻辑可以简化为MainActivity.java:
package com.example.codeui;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//(1)建立androidx.constraintlayout.widget.ConstraintLayout标签
ConstraintLayout cl=new ConstraintLayout(this);
//参数1 layout_width,参数2layout_height
ConstraintLayout.LayoutParams clp=new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT,ConstraintLayout.LayoutParams.MATCH_PARENT);
new ConstraintLayout.LayoutParams(clp);
//(2)建立LinearLayout标签
LinearLayout ll = new LinearLayout(this);
//设置线性为垂直线性
ll.setOrientation(LinearLayout.VERTICAL);
//(3)建立TextView标签
TextView tv = new TextView(this);
tv.setText("代码实现的ui--代码简化");
//(4)建立EditText标签
EditText et = new EditText(this);
//(5)闭合标签,生成整个结构
ll.addView(tv,ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
ll.addView(et,ViewGroup.LayoutParams.MATCH_PARENT,dip2px(this,20));
cl.addView(ll,LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
//(6)设置内容布局
setContentView(cl);
}
private int dip2px(Context context, float dipValue)
{
Resources r = context.getResources();
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, r.getDisplayMetrics());
}
}
最后部署到设备上也是没有问题的
关键字词:android,ui
上一篇:81_程序的屏幕适配