一 px 和 pt
1 px pixels 像素点
2 pt point 一个标准的长度单位,1pt = 1/72英寸,用于印刷业,非常简单易用。
二 dp 和 sp
1 dp 就是 dip
device independent pixels(设备独立像素) 不同设备有不同的显示效果。这个和设备硬件有关系,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素
比如设置一个100dp的按钮,那么它会随着屏幕的放大而放大。
2 sp:scaled pixels (放大像素)主要用于字体显示 best for textsize
三 LayoutParams
相当于一个Layout的信息包,它封装了Layout的位置,高,宽等信息。
这个主要在java代码中设置布局信息的时候使用
// setContentView(R.layout.activity_main);
LinearLayout linearLayout = new LinearLayout(this);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
linearLayout.setLayoutParams(layoutParams);
TextView textView = new TextView(this);
textView.setText("Hello");
textView.setBackgroundColor(0xff00ff00);
// 这里的100 和 200 是像素
textView.setLayoutParams(new LinearLayout.LayoutParams(300,300));
linearLayout.addView(textView);
setContentView(linearLayout);
四 ViewPager 的使用
一个简单的页面切换组件,可以左右滑动,切换不同的页面。
一个ViewPager 有一个对应的PageAdapter
首先准备三个Layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#ff0000">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Layout1"
android:textSize="50sp"
/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#00ff00">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Layout2"
android:textSize="50sp"
/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#0000ff">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Layout3"
android:textSize="50sp"
/>
</LinearLayout>
自定义 MyViewPagerAdapter
package com.example.leonardoday1;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;
import java.util.List;
public class MyViewPagerAdapter extends PagerAdapter {
List<View> views;
public MyViewPagerAdapter(List<View> views) {
this.views = views;
}
// 获取viewPager 中有多少个view
@Override
public int getCount() {
return views.size();
}
// 将给定位置的view 添加到viewGroup 中去,创建并且显示出来
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
container.addView(views.get(position),0);
return views.get(position);
}
// 判断函数返回的key 与 一个页面视图是否代表的是同一个视图(即它俩是否是对应的,对应的话表示同一个view)
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
// 移除一个给定位置的页面
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView(views.get(position));
// super.destroyItem(container, position, object);
}
}
调用
LayoutInflater layoutInflater = getLayoutInflater().from(this);
View view1 = layoutInflater.inflate(R.layout.day3_layout1, null);
View view2 = layoutInflater.inflate(R.layout.day3_layout2, null);
View view3 = layoutInflater.inflate(R.layout.day3_layout3, null);
List<View> views = new ArrayList<>();
views.add(view1);
views.add(view2);
views.add(view3);
ViewPager vp = findViewById(R.id.vp);
// 设置adapter
vp.setAdapter(new MyViewPagerAdapter(views));