第十一天的PickerView和AutoSize

PickerView是什么

仿iOS的PickerView控件,带有3D圆弧效果,并封装了时间选择和选项选择这两种选择器。

导包

implementation 'com.contrarywind:Android-PickerView:4.1.9'

用法

XML中的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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">

    <com.contrarywind.view.WheelView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/wheel"></com.contrarywind.view.WheelView>

</LinearLayout>

在代码中使用

package com.fenghongzhang.day011;

import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

import com.bigkoo.pickerview.adapter.ArrayWheelAdapter;
import com.contrarywind.listener.OnItemSelectedListener;
import com.contrarywind.view.WheelView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    
    
    private WheelView wheel;

    private static final String TAG = "MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        wheel = (WheelView) findViewById(R.id.wheel);
        //数据源
        final List<String> list = new ArrayList<>();
        list.add("我的中国心");
        list.add("北国之春");
        list.add("鹿港小镇");
        wheel.setOnItemSelectedListener(new OnItemSelectedListener() {
    
    
            @Override
            public void onItemSelected(int index) {
    
    
                Log.i(TAG, "onItemSelected: "+list.get(index));
            }
        });
        //数组适配器
        ArrayWheelAdapter arrayWheelAdapter = new ArrayWheelAdapter(list);
        //设置适配器
        wheel.setAdapter(arrayWheelAdapter);
    }
}

效果图

```

联级选择器

final List<String> options1Items = new ArrayList<>();
        options1Items.add("射雕英雄传");
        options1Items.add("神雕侠侣");
        options1Items.add("鹿鼎记");


        List<String> options2Items_01 = new ArrayList<>();
        options2Items_01.add("郭靖");
        options2Items_01.add("黄蓉");
        options2Items_01.add("杨铁心");
        options2Items_01.add("欧阳克");
        List<String> options2Items_02 = new ArrayList<>();
        options2Items_02.add("小龙女");
        options2Items_02.add("杨过");
        options2Items_02.add("大雕");

        final List<List<String>> options2Items = new ArrayList<>();
        options2Items.add(options2Items_01);
        options2Items.add(options2Items_02);

        //练级选择器--对话框
        OptionsPickerView<String> build = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
    
    
            @Override
            public void onOptionsSelect(int options1, int options2, int options3, View v) {
    
    
                String tx = options1Items.get(options1) + options2Items.get(options1).get(options2);
                Toast.makeText(getBaseContext(), tx, Toast.LENGTH_SHORT).show();
            }
        }).build();

        //设置数据源
        build.setPicker(options1Items,options2Items);
        //一定要有
        build.show();

连级效果图

在这里插入图片描述

时间选择器

private void showTimePickerView() {
    TimePickerView pvTime = new TimePickerBuilder(MainActivity.this, new OnTimeSelectListener() {
        @Override
        public void onTimeSelect(Date date, View v) {
            Toast.makeText(MainActivity.this, date.toString(), Toast.LENGTH_SHORT).show();
        }
    }).build();
    pvTime.show();//显示时间选择器
}

连级效果图

在这里插入图片描述

AndroidAutoSize

1、dp,sp转px
px:像素
dp:虚拟像素,在不同的像素密度的设备上会自动适配
dip:同dp
sp:同dp相似,用于字体,会根据用户的字体大小偏好来缩放

public class DisplayUtils {
    
    
    /**
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */
    public static int dp2px(Context context, int dpValue) {
    
    
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }
    /**
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
     */
    public static int px2dp(Context context, int pxValue) {
    
    
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }
    /**
     * 将sp值转换为px值,保证文字大小不变
     */
    public static int sp2px(Context context, int spValue) {
    
    
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (spValue * fontScale + 0.5f);
    }
    /**
     * 将px值转换为sp值,保证文字大小不变
     */
    public static int px2sp(Context context, int pxValue) {
    
    
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (pxValue / fontScale + 0.5f);
    }
    /**
     * dp转为px
     * @param context
     * @param dp
     * @return
     */
    public static int dp2px_2(Context context, int dp) {
    
    
        return (int) TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_DIP, dp,
                context.getResources().getDisplayMetrics());
    }
    /**
     * sp转为px
     * @param context
     * @param sp
     * @return
     */
    public static int sp2px_2(Context context, int sp) {
    
    
        return (int) TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_SP, sp,
                context.getResources().getDisplayMetrics());
    }
}

2、UI自动适配框架配置以及使用
AutoLayout(已废弃,不建议使用)
[停止维护]Android屏幕适配方案,直接填写设计图上的像素尺寸即可完成适配,最大限度解决适配问题。
https://github.com/hongyangAndroid/AndroidAutoLayout

AndroidAotuSize
A low-cost Android screen adaptation solution (今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案).
https://github.com/JessYanCoding/AndroidAutoSize

导包

implementation ‘me.jessyan:autosize:1.2.1’

在 AndroidManifest 中填写全局设计图尺寸 (单位 dp)

<manifest>
    <application>            
        <meta-data
            android:name="design_width_in_dp"
            android:value="360"/>
        <meta-data
            android:name="design_height_in_dp"
            android:value="640"/>           
     </application>           
</manifest>

猜你喜欢

转载自blog.csdn.net/xXLlname/article/details/114283395