前言 :
各位同学大家好,有段时间没有给大家更新文章了,具体多久呢我也记不清楚了。最近又去鸿蒙开发社区看了一看 有get一些新知识点 我觉得有必要给大家分享下 今天就给大家分享一个Picker 配合CommonDialog 实现的 日期选择器
效果图
image.png
image.png
具体实现
package com.example.picker.dialog;
import com.example.picker.ResourceTable;
import com.example.picker.listener.PickerdialogListener;
import ohos.aafwk.ability.Ability;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
import ohos.agp.components.LayoutScatter;
import ohos.agp.components.Picker;
import ohos.agp.window.dialog.CommonDialog;
import ohos.app.Context;
/***
* 创建人: xuqing
* 创建时间:2021年3月19日15:18:33
* 类说明:底部选择器弹窗
*
*/
public class PickerDialog extends CommonDialog implements Component.ClickedListener {
private Ability context;
private PickerdialogListener listener;
private Picker picker ;
private Button cancelbtn,affirmbtn;
private String getdata;
private String[]getStr={"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"};
Component layout;
public PickerDialog(Ability context, PickerdialogListener listener) {
super(context);
this.context=context;
this.listener=listener;
}
@Override
protected void onCreate() {
super.onCreate();
layout = LayoutScatter.getInstance(context).
parse(ResourceTable.Layout_common_dialog, null, true);
setTransparent(true);
setContentCustomComponent(layout);
initview();
}
private void initview() {
picker= (Picker)layout.findComponentById(ResourceTable.Id_test_picker);
cancelbtn= (Button) layout.findComponentById(ResourceTable.Id_cancel_btn);
affirmbtn= (Button) layout.findComponentById(ResourceTable.Id_affirm_btn);
cancelbtn.setClickedListener(this);
affirmbtn.setClickedListener(this);
picker.setDisplayedData(getStr);
picker.setValueChangedListener(new Picker.ValueChangedListener() {
@Override
public void onValueChanged(Picker picker, int i, int i1) {
System.out.println("i -- > "+i+" i1 --- > "+ i1);
System.out.println(getStr[i1]);
}
});
picker.setValueChangedListener((picker1, oldVal, newVal) -> {
// oldVal:上一次选择的值; newVal:最新选择的值
System.out.println("oldVal "+oldVal +"newVal --- > "+newVal);
System.out.println("getstr --- > "+getStr[newVal]);
getdata=getStr[newVal];
});
picker.setFormatter(i -> {
String value;
switch (i) {
case 0:
value = "Mon";
break;
case 1:
value = "Tue";
break;
case 2:
value = "Wed";
break;
case 3:
value = "Thu";
break;
case 4:
value = "Fri";
break;
case 5:
value = "Sat";
break;
case 6:
value = "Sun";
break;
default:
value = "" + i;
}
return value;
});
}
@Override
public void onClick(Component component) {
switch (component.getId()){
case ResourceTable.Id_affirm_btn:
PickerDialog.this.hide();
listener.getPickerStrSuccess(getdata);
break;
case ResourceTable.Id_cancel_btn:
PickerDialog.this.hide();
listener.getPickerStrerror();
break;
default:
break;
}
}
}
PickerDialog 继承sdk的 CommonDialog 并重写 oncreate 方法 和自己的构造方法 然后我们加载了PickerDialog 的布局文件
image.png
这边我们写了2个button 和一个picker 选择器组件 我们在PickerDialog 中填充我们的布局文件 然后初始化我们的控件
- 加载布局
@Override
protected void onCreate() {
super.onCreate();
layout = LayoutScatter.getInstance(context).
parse(ResourceTable.Layout_common_dialog, null, true);
setTransparent(true);
setContentCustomComponent(layout);
initview();
}
- 初始化控件
picker= (Picker)layout.findComponentById(ResourceTable.Id_test_picker);
cancelbtn= (Button) layout.findComponentById(ResourceTable.Id_cancel_btn);
affirmbtn= (Button) layout.findComponentById(ResourceTable.Id_affirm_btn);
cancelbtn.setClickedListener(this);
affirmbtn.setClickedListener(this);
- 选择器添加数据
private String[]getStr={"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"};
picker.setDisplayedData(getStr);
- 响应选择器变化
picker.setValueChangedListener((picker1, oldVal, newVal) -> {
// oldVal:上一次选择的值; newVal:最新选择的值
System.out.println("oldVal "+oldVal +"newVal --- > "+newVal);
System.out.println("getstr --- > "+getStr[newVal]);
getdata=getStr[newVal];
});
- 格式化Picker的显示 通过Picker的setFormatter(Formatter formatter)方法,用户可以将Picker选项中显示的字符串修改为特定的格式。
picker.setFormatter(i -> {
String value;
switch (i) {
case 0:
value = "Mon";
break;
case 1:
value = "Tue";
break;
case 2:
value = "Wed";
break;
case 3:
value = "Thu";
break;
case 4:
value = "Fri";
break;
case 5:
value = "Sat";
break;
case 6:
value = "Sun";
break;
default:
value = "" + i;
}
return value;
});
在MainAbility 中显示
package com.example.picker;
import com.example.picker.dialog.PickerDialog;
import com.example.picker.listener.PickerdialogListener;
import com.example.picker.slice.MainAbilitySlice;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
import ohos.agp.components.TableLayout;
import ohos.agp.components.Text;
import static ohos.agp.utils.LayoutAlignment.BOTTOM;
public class MainAbility extends Ability {
private Button button;
private Text text;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
initview();
}
private void initview() {
button= (Button) findComponentById(ResourceTable.Id_mainbtn);
text= (Text) findComponentById(ResourceTable.Id_miantext);
if(button!=null){
button.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
PickerDialog dialog=new PickerDialog(MainAbility.this, new PickerdialogListener() {
@Override
public void getPickerStrSuccess(String str) {
text.setText(str);
}
@Override
public void getPickerStrerror() {
}
});
dialog.setAlignment(BOTTOM);
dialog.show();
}
});
}
}
}
MainAbility 布局文件
到此鸿蒙 Picker日期选择器实现教程 就讲完了。
最后总结
鸿蒙里面提供了picker选择器控件给我们用 所以我们配合sdk提供的 CommonDialog 弹窗控件 就很容易实现比较简单的底部的日期选择器 。整个功能实现比较接近原生安卓 但是又比安卓更进一步所以 实现起来不难 有兴趣的同学还可以尝试实现更为复杂多样的选择 这边就不展开讲了 。最后希望我的文章能帮助到各位解决问题 ,以后我还会贡献更多有用的代码分享给大家。
阅读全文
资源下载
下载价格免费
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=21641,转载请注明出处。
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=21641,转载请注明出处。
评论0