实习笔记之个人设置界面
来源:互联网 发布:ucpaas java短信发送 编辑:程序博客网 时间:2024/06/06 03:52
这是实习第一周的几天所做的事情,主要内容包括:
- 切图
- 几种基本控件的使用
- 主要实现功能:修改密码,个人资料(头像选择,修改昵称,性别选择),关于我们
声明:所有代码基于kotlin和databinding。
首先是设置界面的跳转:
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_main, menu) return true } override fun onOptionsItemSelected(item: MenuItem): Boolean { if (item.itemId == R.id.menu_setting) { SettingActivity.startActivity(this@EtripMainActivity) return true } else { return super.onOptionsItemSelected(item) } }
重写上述两个方法,在主页面中增加菜单栏并设置跳转图标和逻辑,跳转到SettingActivity
中。 SettingActivity
的界面如下:
代码如下:
package com.radella.etrip.ui.settingimport android.content.Contextimport android.content.Intentimport android.databinding.DataBindingUtilimport android.view.Viewimport android.widget.Buttonimport android.widget.LinearLayoutimport android.widget.TextViewimport com.radella.etrip.Rimport com.radella.etrip.base.BaseNormalActivityimport com.radella.etrip.databinding.ActivitySetting1Bindingimport com.radella.etrip.ui.main.EtripMainActivityclass SettingActivity : BaseNormalActivity(),View.OnClickListener { override fun onClick(v: View?) {//各控件的点击事件,分别进入不同页面中 val text: TextView? = v?.findViewById(R.id.text) as TextView? when(text?.text) { "个人资料" -> { PersonalDataActivity.startActivity(this@SettingActivity) } "修改密码" -> { ModifyPwdActivity.startActivity(this@SettingActivity) } "关于我们" -> { AboutUsActivity.startActivity(this@SettingActivity) } } } lateinit var settingBinding: ActivitySetting1Binding var strings:Strings?=null override fun daggerInject() { } override fun initialize() {//初始化界面的数据,通过databinding绑定到xml文件,然后注册点击事件 strings=Strings("个人资料","") settingBinding.personalData=strings strings=Strings("修改密码","") settingBinding.changePwd=strings strings=Strings("关于我们","") settingBinding.aboutUs=strings var item1:LinearLayout?= findViewById(R.id.item1) as LinearLayout? item1?.setOnClickListener(this@SettingActivity) var item2:LinearLayout?= findViewById(R.id.item2) as LinearLayout? item2?.setOnClickListener(this@SettingActivity) var item3:LinearLayout?= findViewById(R.id.item3) as LinearLayout? item3?.setOnClickListener(this@SettingActivity) var returnEtripMain:Button= findViewById(R.id.setting_return_EtripMain) as Button returnEtripMain.setOnClickListener(View.OnClickListener { EtripMainActivity.startActivity(this@SettingActivity) finish() }) } override fun loadViewLayout() {//databinding绑定到xml中 settingBinding = DataBindingUtil.inflate(layoutInflater, R.layout.activity_setting1,binding.llContainer,true) } companion object{//在其他activity中调用该方法启动本activity fun startActivity(context: Context){ val intent = Intent() intent.setClass(context,SettingActivity::class.java) context.startActivity(intent) } }}
以及SettingActivity
的xml布局R.layout.activity_setting1
<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:bind="http://schemas.android.com/tools"> <data> <variable name="personal_data" type="com.radella.etrip.ui.setting.Strings"/> <variable name="change_pwd" type="com.radella.etrip.ui.setting.Strings"/> <variable name="about_us" type="com.radella.etrip.ui.setting.Strings"/> </data> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginStart="20dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="设置" android:layout_marginTop="102dp" android:textSize="26sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginTop="20dp" android:background="@color/black_alpha_10" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:id="@+id/item1"> <include layout="@layout/line_with_text" bind:viewModel="@{personal_data}" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:id="@+id/item2"> <include layout="@layout/line_with_text" bind:viewModel="@{change_pwd}" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:id="@+id/item3"> <include layout="@layout/line_with_text" bind:viewModel="@{about_us}" /> </LinearLayout> </LinearLayout> <Button android:id="@+id/setting_return_EtripMain" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="40dp" android:layout_marginEnd="40dp" android:layout_marginTop="16dp" android:text="退出登录" android:textSize="16sp" android:textColor="@color/white" android:layout_gravity="center_vertical" android:backgroundTint="@color/colorPrimary"/> </LinearLayout></layout>
这里有几点要注意:
- databinding与include标签的结合,可以将当前xml布局的数据传输到include的布局中
- 设置Button的背景
backgroundTint
,效果好于background
,有圆角
PersonalDataActivity
个人资料界面
代码部分:
package com.radella.etrip.ui.settingimport android.Manifestimport android.app.Dialogimport android.content.Contextimport android.content.DialogInterfaceimport android.content.Intentimport android.content.pm.PackageManagerimport android.databinding.DataBindingUtilimport android.graphics.Bitmapimport android.graphics.BitmapFactoryimport android.os.Bundleimport android.os.Environmentimport android.support.v4.app.ActivityCompatimport android.support.v4.content.ContextCompatimport android.support.v7.app.AlertDialogimport android.util.Logimport android.view.Gravityimport android.view.KeyEventimport android.view.Viewimport android.widget.ImageViewimport android.widget.LinearLayoutimport android.widget.PopupWindowimport android.widget.TextViewimport com.radella.etrip.Rimport com.radella.etrip.base.BaseNormalActivityimport com.radella.etrip.databinding.ActivityPersonalDataBindingimport com.sw926.imagefileselector.ErrorResultimport com.sw926.imagefileselector.ImageFileSelectorclass PersonalDataActivity : BaseNormalActivity(),View.OnClickListener { lateinit var personalDataBinding: ActivityPersonalDataBinding lateinit var imageSelector: ImageFileSelector var popupWindow:PopupWindow?=null override fun onClick(v: View?) { if (v?.id==R.id.head_icon)//点击头像,弹出popwindow { val current_view=layoutInflater.inflate(R.layout.activity_personal_data,null) val view = layoutInflater.inflate(R.layout.head_icon_choose, null) val windowManager = windowManager val width = windowManager.defaultDisplay.width val heigth = windowManager.defaultDisplay.height Log.i("width", width.toString() + "") Log.i("height", heigth.toString() + "") popupWindow = PopupWindow(view, width.toInt(), heigth.toInt()) popupWindow?.animationStyle=R.style.anim_menu_bottom_bar//设置弹出动画 popupWindow?.isFocusable = true popupWindow?.isTouchable=true popupWindow?.isOutsideTouchable = true view.isFocusable=true view.isFocusableInTouchMode=true view.setOnKeyListener(object :View.OnKeyListener{//设置点击返回键的事件,令popwindow消失 override fun onKey(v: View?, keyCode: Int, event: KeyEvent?): Boolean { if (keyCode==KeyEvent.KEYCODE_BACK) { if (popupWindow?.isShowing!!) { popupWindow?.dismiss() } } return false } } )// popupWindow?.setBackgroundDrawable(PaintDrawable()) //显示在屏幕中央 popupWindow?.showAtLocation(current_view, Gravity.CENTER, 0, 40) val close_icon:ImageView= view.findViewById(R.id.close_icon) as ImageView close_icon.setOnClickListener(View.OnClickListener {popupWindow?.dismiss()}) val take_picture:ImageView= view.findViewById(R.id.take_picture) as ImageView take_picture.setOnClickListener(View.OnClickListener { popupWindow?.dismiss() imageSelector.takePhoto(this@PersonalDataActivity,2) }) val photo_album:ImageView= view.findViewById(R.id.photo_album) as ImageView photo_album.setOnClickListener(View.OnClickListener { popupWindow?.dismiss() imageSelector.selectImage(this@PersonalDataActivity,3) }) return } val text: TextView? = v?.findViewById(R.id.text) as TextView? when(text?.text) { "昵称" -> { var intent:Intent=Intent(this@PersonalDataActivity,ModifyNicknameActivity::class.java) intent.putExtra("nickname",personalDataBinding.text2.data) startActivityForResult(intent,10) } "性别" ->{ val choiceonclicklistener=ChoiceOnClickListener() val sex:String?=personalDataBinding.text3.data val sexInt=if (sex=="女")1 else 0 val sexDialog:Dialog=AlertDialog.Builder(this@PersonalDataActivity) .setTitle("选择性别") .setSingleChoiceItems(R.array.sex,sexInt,choiceonclicklistener) .setPositiveButton("确定", DialogInterface.OnClickListener { dialog, which -> if (choiceonclicklistener.which==0) { var strings=Strings("性别","男") personalDataBinding.text3=strings } else { var strings=Strings("性别","女") personalDataBinding.text3=strings } }) .create() sexDialog.show() } } } override fun loadViewLayout() { personalDataBinding=DataBindingUtil.inflate(layoutInflater, R.layout.activity_personal_data,binding.llContainer,true) } override fun daggerInject() { } override fun initialize() { val str="头像" personalDataBinding.text1=str var strings=Strings("昵称","周吉") personalDataBinding.text2=strings strings=Strings("性别","女") personalDataBinding.text3=strings// strings=Strings("地区","北京")// personalDataBinding.text4=strings var item1:ImageView=findViewById(R.id.head_icon) as ImageView item1.setOnClickListener(this@PersonalDataActivity) var item2:LinearLayout= findViewById(R.id.personal_data_item2) as LinearLayout item2.setOnClickListener(this@PersonalDataActivity) var item3:LinearLayout= findViewById(R.id.personal_data_item3) as LinearLayout item3.setOnClickListener(this@PersonalDataActivity) imageSelector = ImageFileSelector(this@PersonalDataActivity) imageSelector.setOutPutPath(Environment.getExternalStorageDirectory().toString() + "/tencent/QQfile_recv/") Log.v("FILEPATH1",Environment.getExternalStorageDirectory().toString() + "/tencent/QQfile_recv/") // 设置输出文件的尺寸 imageSelector.setOutPutImageSize(800, 600) // 设置保存图片的质量 0到100 imageSelector.setQuality(80) imageSelector.setCallback(object : ImageFileSelector.Callback { override fun onSuccess(file: String) { // 选取图片成功 Log.v("FILEPATH2",file)// val head_icon_layout=layoutInflater.inflate(R.layout.line_with_image,null) val head_icon_layout: View? =findViewById(R.id.head_icon) val head_icon_image:ImageView?= head_icon_layout?.findViewById(R.id.head_icon) as ImageView? if (head_icon_image==null) { Log.v("HEADICON","NULL") } else { val image:Bitmap?= BitmapFactory.decodeFile(file) head_icon_image?.setImageBitmap(image) head_icon_image.scaleType=ImageView.ScaleType.CENTER_CROP } } override fun onError(errorResult: ErrorResult?) { when(errorResult){ } } }) checkPermissionPic() } /** * 检查读取相册的权限 */ fun checkPermissionPic(){ if( ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED ){ }else { if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE) && ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE), 1); } else { ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE), 1); } } } //点击保存退到设置界面 fun clickReturnSetting(view: View){ finish() } companion object{ fun startActivity(context: Context){ val intent = Intent() intent.setClass(context,PersonalDataActivity::class.java) context.startActivity(intent) } } class ChoiceOnClickListener:DialogInterface.OnClickListener{ var which:Int=0 override fun onClick(dialog: DialogInterface?, which: Int) { this.which=which } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode==10&&resultCode==10) { var bundle:Bundle?=data?.getBundleExtra("nickname") var strings=Strings("昵称", bundle!!["nickname"] as String?) personalDataBinding.text2=strings } imageSelector.onActivityResult(this@PersonalDataActivity,requestCode,resultCode,data) } override fun onSaveInstanceState(outState: Bundle?) { super.onSaveInstanceState(outState) imageSelector.onSaveInstanceState(outState) } override fun onRestoreInstanceState(savedInstanceState: Bundle?) { super.onRestoreInstanceState(savedInstanceState) imageSelector.onRestoreInstanceState(savedInstanceState) } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) { if (requestCode == 1){ if (grantResults.size == 2 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) { //授权成功 } else { //授权失败 } } else { super.onRequestPermissionsResult(requestCode, permissions, grantResults) imageSelector.onRequestPermissionsResult(this@PersonalDataActivity,requestCode, permissions, grantResults) } }}
这个个人资料的界面代码是耗时最多的部分,干了三件事:
- 选择头像
- 修改昵称
- 选择性别
分别细说:
1.选择头像。
核心:popwindow、imageSelector的使用、权限申请和检查,popwindow用于在点击头像时弹出半透明的选择方式界面,注意界面本身和界面外部的属性设置即可。
imageSelector的使用:
imageSelector = ImageFileSelector(this@PersonalDataActivity) imageSelector.setOutPutPath(Environment.getExternalStorageDirectory().toString() + "/tencent/QQfile_recv/") // 设置输出文件的尺寸 imageSelector.setOutPutImageSize(800, 600) // 设置保存图片的质量 0到100 imageSelector.setQuality(80) imageSelector.setCallback(object : ImageFileSelector.Callback { override fun onSuccess(file: String) { // 选取图片成功 Log.v("FILEPATH2",file)// val head_icon_layout=layoutInflater.inflate(R.layout.line_with_image,null) val head_icon_layout: View? =findViewById(R.id.head_icon) val head_icon_image:ImageView?= head_icon_layout?.findViewById(R.id.head_icon) as ImageView? if (head_icon_image==null) { Log.v("HEADICON","NULL") } else { val image:Bitmap?= BitmapFactory.decodeFile(file) head_icon_image?.setImageBitmap(image) head_icon_image.scaleType=ImageView.ScaleType.CENTER_CROP } } override fun onError(errorResult: ErrorResult?) { when(errorResult){ } } }) }
当选取图片成功后会调用onSuccess方法
其次要在onSaveInstanceState、
onRestoreInstanceState、
onRequestPermissionsResult
方法最后分别加上 imageSelector.onSaveInstanceState(outState)、
imageSelector.onRestoreInstanceState(savedInstanceState)、
imageSelector.onRequestPermissionsResult(this@PersonalDataActivity,requestCode, permissions, grantResults)
关于权限方面其实百度就行,代码中也有了
xml文件如下:activity_personal_data
<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:bind="http://schemas.android.com/tools"> <data> <variable name="text1" type="String"/> <variable name="text2" type="com.radella.etrip.ui.setting.Strings"/> <variable name="text3" type="com.radella.etrip.ui.setting.Strings"/> <!--<variable--> <!--name="text4"--> <!--type="com.radella.etrip.ui.setting.Strings"/>--> </data> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginStart="20dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="个人资料" android:layout_marginTop="102dp" android:textSize="26sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:layout_marginTop="18dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/personal_data_item1"> <include layout="@layout/line_with_image" bind:text="@{text1}" android:id="@+id/head_icon_layout" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/personal_data_item2"> <include layout="@layout/line_with_text" bind:viewModel="@{text2}"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/personal_data_item3"> <include layout="@layout/line_with_text" bind:viewModel="@{text3}"/> </LinearLayout> <!--<include--> <!--layout="@layout/line_with_text"--> <!--bind:viewModel="@{text4}"/>--> </LinearLayout> </LinearLayout> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="76dp" android:layout_marginEnd="76dp" android:layout_marginTop="32dp" android:text="保存" android:textColor="@color/white" android:backgroundTint="@color/colorPrimary" android:textSize="16sp" android:layout_gravity="center_vertical" android:onClick="clickReturnSetting" /> </LinearLayout></layout>
2.修改昵称ModifyNicknameActivity
package com.radella.etrip.ui.settingimport android.content.Contextimport android.content.Intentimport android.databinding.DataBindingUtilimport android.os.Bundleimport android.util.Logimport android.view.Viewimport android.widget.Buttonimport com.radella.etrip.Rimport com.radella.etrip.base.BaseNormalActivityimport com.radella.etrip.dagger.ActivityModuleimport com.radella.etrip.dagger.DaggerAppComponentimport com.radella.etrip.databinding.ActivityModifyNicknameBindingimport com.radella.etrip.viewmodle.setting.ModifyNameViewModelimport javax.inject.Injectclass ModifyNicknameActivity : BaseNormalActivity(),View.OnClickListener { lateinit var modifyNicknameBinding: ActivityModifyNicknameBinding @Inject lateinit var viewModel: ModifyNameViewModel override fun loadViewLayout() { modifyNicknameBinding=DataBindingUtil.inflate(layoutInflater, R.layout.activity_modify_nickname,binding.llContainer,true) } override fun daggerInject() { DaggerAppComponent .builder().activityModule(ActivityModule(this@ModifyNicknameActivity)) .build() .inject(this) } override fun initialize() { modifyNicknameBinding.viewModel = viewModel oldnickname=intent.getStringExtra("nickname") modifyNicknameBinding.viewModel.edit_text.set(oldnickname) //获取原昵称 if (oldnickname?.isNotEmpty()!!) { modifyNicknameBinding.viewModel.save_color.set(resources.getColor(R.color.colorPrimary)) modifyNicknameBinding.viewModel.saveEnabled.set(true) //当编辑框不为空时令保存按钮可点击 } else { //否则不可点击 modifyNicknameBinding.viewModel.save_color.set(resources.getColor(R.color.qupai_gray_0xd4)) modifyNicknameBinding.viewModel.saveEnabled.set(false) } } var oldnickname:String?=null override fun onClick(v: View?) { val edit_nickname:String=modifyNicknameBinding.viewModel.edit_text.get() var bundle:Bundle=Bundle() bundle.putString("nickname", edit_nickname) Log.v("edit_nickname",edit_nickname) intent.putExtra("nickname",bundle) setResult(10,intent)// PersonalDataActivity.startActivity(this@ModifyNicknameActivity) finish() } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) var saveButton: Button = findViewById(R.id.modify_nickname_save) as Button saveButton.setOnClickListener(this@ModifyNicknameActivity)// oldnickname=intent.getStringExtra("nickname")// var edit_nickname:MaterialEditText= findViewById(R.id.edit_nickname) as MaterialEditText// edit_nickname.setText(oldnickname) } companion object{ fun startActivity(context: Context){ val intent = Intent() intent.setClass(context,ModifyNicknameActivity::class.java) context.startActivity(intent) } }}
xml文件:activity_modify_nickname
<layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <variable name="viewModel" type="com.radella.etrip.viewmodle.setting.ModifyNameViewModel"/> </data> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:layout_marginStart="20dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="102dp" android:text="修改昵称" android:textSize="26sp"/> <TextView style="@style/text_20_black" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="4dp" android:text="可使用中英文、数字和下划线,字数限制1-10个字" android:textSize="12sp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="68dp" android:text="输入昵称" android:textSize="12sp"/> <com.rengwuxian.materialedittext.MaterialEditText android:id="@+id/edit_nickname" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="18sp" android:maxLength="10" android:text="@{viewModel.edit_text.get()}" app:onTextChangedCommand="@{viewModel.textChangeCommand}" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="48dp" android:backgroundTint="@{viewModel.save_color.get()}" android:text="保存" android:textSize="16sp" android:textColor="#fff" android:layout_marginStart="40dp" android:layout_marginEnd="40dp" android:layout_gravity="center_horizontal" android:enabled="@{viewModel.saveEnabled.get()}" android:id="@+id/modify_nickname_save"/> </LinearLayout> </LinearLayout></layout>
1.<com.rengwuxian.materialedittext.MaterialEditText
设置最长字数用maxlength
android:id="@+id/edit_nickname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:maxLength="10"
android:text="@{viewModel.edit_text.get()}"
app:onTextChangedCommand="@{viewModel.textChangeCommand}"
/>
2.该页面的viewmodel
package com.radella.etrip.viewmodle.settingimport android.app.Activityimport android.databinding.ObservableBooleanimport android.databinding.ObservableFieldimport android.databinding.ObservableIntimport android.util.Logimport com.kelin.mvvmlight.base.ViewModelimport com.kelin.mvvmlight.bindingadapter.edittext.ViewBindingAdapterimport com.kelin.mvvmlight.command.ReplyCommandimport com.radella.etrip.Rimport rx.functions.Action0import java.util.*import javax.inject.Inject/** * Created by 邓苏桃 on 2017/7/21. */class ModifyNameViewModel @Inject internal constructor():ViewModel{ @Inject lateinit var context: Activity var saveEnabled= ObservableBoolean() var edit_text=ObservableField<String>() var save_color=ObservableInt() var textChangeCommand=ReplyCommand<ViewBindingAdapter.TextChangeDataWrapper>(){ t -> Log.v("edit_text1",edit_text.get()) if (t.s.isNotEmpty()) { saveEnabled.set(true) save_color.set(context.resources.getColor(R.color.colorPrimary)) } else { saveEnabled.set(false) save_color.set(context.resources.getColor(R.color.qupai_gray_0xd4)) } edit_text.set(t.s.toString()) Log.v("edit_text2",edit_text.get()) }}
使用了ReplyCommand,其类型需要查询文档。
set_color应该这样设置:
save_color.set(context.resources.getColor(R.color.colorPrimary))
而不是直接写R.color.colorPrimary
3.选择性别
就是一个简单的Dialog创建,实现DialogInterface.OnClickListener
接口以记录点击的位置(which)
其他两个界面比较简单,修改密码调下界面即可,关于我们的图要用ScaleType:centercrop来充满整个页面。
- 实习笔记之个人设置界面
- 实习笔记之getElement
- 界面设置笔记
- 实习笔记之Spring MVC
- Django学习笔记之【管理(admin)界面设置】
- 《猜猜看》之界面设置
- 个人笔记之 GridView+ViewPager+CircleIndicator实现左右滑动、网格界面+popupingwindow弹出显示
- 服务器安全设置个人笔记
- 个人笔记之this
- 个人笔记之super
- 个人笔记之堆栈
- 个人笔记之style
- Android学习之RecylerView实习仿支付宝充值界面
- Android学习之RecylerView实习仿支付宝充值界面
- 实习笔记之Spring MVC(二)
- 实习笔记之Spring MVC + ajax + highcharts
- Android设置界面之Preference
- cmd.exe 命令行控制台界面初始化 个人设置技巧
- Oralce数据库自动启动shell脚本
- root cause org.apache.ibatis.ognl.OgnlException: source is null for getProperty(null, "XXX")
- mysql数据库进行连接查询时在join on 后的and 和where 区别
- Bitmap和Base64之间的转换以及Base64 encode
- 软件测试人员易遗漏的一些隐藏缺陷
- 实习笔记之个人设置界面
- 搬家了-博客园
- UITextField的各种属性,代理方法,常见的使用,纯代码和可视化工具中的都有
- Give Me This Pizza
- Android源码博文集锦4
- 杭电暑期多校集训—Is Derek lying?
- 使用Maven整合Spring+SpringMVC+Hibernate
- * 24种设计模式——组合模式
- 网站打开速度慢的原因分析及对策