pickerView
官网:https://github.com/Bigkoo/Android-PickerView
依赖:implementation ‘com.contrarywind:Android-PickerView:4.1.8’
省市区三级联动(json串从官网获得)
activity
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private ArrayList<String> options1Items = new ArrayList<>();
private ArrayList<ArrayList<String>> options2Items = new ArrayList<>();
private ArrayList<ArrayList<ArrayList<String>>> options3Items = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn).setOnClickListener(this);
getData();
}
public String getJson(){
StringBuffer sb = new StringBuffer();
InputStream open = null;
try {
open = getAssets().open("province.json");
byte[] b = new byte[1024*8];
int len = 0;
while ((len = open.read(b)) != -1){
sb.append(new String(b,0,len));
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
open.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
private void getData() {
try {
JSONArray jsonArray = new JSONArray(getJson());
for (int i = 0; i < jsonArray.length(); i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
String name = jsonObject.getString("name");
options1Items.add(name);
JSONArray city = jsonObject.getJSONArray("city");
ArrayList<String> cityList = new ArrayList<>();//该省的城市列表(第二级)
ArrayList<ArrayList<String>> province_AreaList = new ArrayList<>();//该省的所有地区列表(第三极)
for (int j = 0; j <city.length(); j++){
JSONObject jsonObject1 = city.getJSONObject(j);
String cityName = jsonObject1.getString("name");
cityList.add(cityName);
JSONArray area = jsonObject1.getJSONArray("area");
ArrayList<String> city_AreaList = new ArrayList<>();//该城市的所有地区列表
for (int n = 0; n < area.length(); n++){
String string = area.getString(n);
city_AreaList.add(string);
}
province_AreaList.add(city_AreaList);
}
//添加地区数据
options3Items.add(province_AreaList);
//添加城市数据
options2Items.add(cityList);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.btn){
OptionsPickerView pvOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int options2, int options3, View v) {
//返回的分别是三个级别的选中位置
String opt1tx = options1Items.size() > 0 ?
options1Items.get(options1) : "";
String opt2tx = options2Items.size() > 0
&& options2Items.get(options1).size() > 0 ?
options2Items.get(options1).get(options2) : "";
String opt3tx = options2Items.size() > 0
&& options3Items.get(options1).size() > 0
&& options3Items.get(options1).get(options2).size() > 0 ?
options3Items.get(options1).get(options2).get(options3) : "";
String tx = opt1tx + opt2tx + opt3tx;
Toast.makeText(MainActivity.this, tx, Toast.LENGTH_SHORT).show();
}
})
.setTitleText("城市选择")
.setDividerColor(Color.BLACK)
.setTextColorCenter(Color.BLACK) //设置选中项文字颜色
.setContentTextSize(20)
.build();
/*pvOptions.setPicker(options1Items);//一级选择器
pvOptions.setPicker(options1Items, options2Items);//二级选择器*/
pvOptions.setPicker(options1Items, options2Items, options3Items);//三级选择器
pvOptions.show();
}
}
}
autoSize
官网:https://github.com/JessYanCoding/AndroidAutoSize/blob/master/README-zh.md#pixel-2-xl–1440-x-2880–560dpi
依赖: implementation ‘me.jessyan:autosize:1.1.2’