| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android侧滑栏DrawerLayout + databinding + 按钮改变颜色 -> 正文阅读 |
|
[移动开发]Android侧滑栏DrawerLayout + databinding + 按钮改变颜色 |
? 工作第一个任务,写一个点击按钮和滑动都可以打开的侧滑栏,作为刚刚开始的菜鸟,写篇心得。 首先是在布局方面的坑,按下按钮之后发现没有反应,查询之后现在发现了问题所在是因为按钮所在的子布局中还有按钮,所以子按钮可以点击但是父按钮点击不了。现在还没改,之后再说吧。 然后是侧滑栏的布局,目前直接在mainActivity中写了个左侧滑栏的布局,一堆的菜单和一个退出的按钮,主要是滑动使得界面展示,点击按钮变色,xml布局,读取数据,绑定界面。 在最开始的绑定界面的过程中,不同于以前的findVIewById方法,采用的是viewModel + viewActivity的java代码,通过databinding的方法实现对控件的绑定。因为学到了很多,所以简单记一下怕以后会忘。 首先是侧滑栏的使用,可以参考https://blog.csdn.net/gaoxiaoweiandy/article/details/81505914?? 通过在所需要侧滑栏的页面直接创建侧滑栏的.xml布局,需要注意的是侧滑栏并不是一个单独的页面,而是在一个页面中隐藏的页面,滑动之后显示,平时不显示而已。因此不需要单独再创建一个activity,在需要侧滑栏的页面的xml中添加布局就可以。 问题是在这样的情况下会使得页面的xml文件冗长,因为需要在xml对应的java文件中初始化控件,添加<include>拆分页面的方法不太行,还没有想到合适的解决方法。哭哭~可能是因为我在页面开始直接写了DrawerLayout,可能不这样写便于拆分页面吗 <androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mainDrawerLayout" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:fitsSystemWindows="true" android:orientation="vertical"> <androidx.appcompat.widget.Toolbar android:id="@+id/mainToolbar" android:layout_width="fill_parent" android:layout_height="wrap_content"/> DrawerLayout的优势对我而言是实现的效果可以直接让源页面作为背景不被覆盖, ?这样可以在源页面上显示半个抽屉,不影响源页面的显示,但是需要在定义的抽屉页面中加入 ?android:clickable="true" ?否则源页面中的控件还是可以被点击或者滑动,显得很奇怪, <LinearLayout android:layout_width="228dp" android:layout_height="fill_parent" android:layout_gravity="start" android:orientation="vertical" android:paddingTop="50dp" android:clickable="true" android:background="#202020"> 另外 android:layout_gravity="start" 是左滑动栏,end是右边,center是中间主页面。 之后我的代码主要是调整布局,新的页面以及页面跳转之类没有技术含量的东西就不说了,有趣的是关于按钮的background的设置,一开始是想让一个控件实现选中改变颜色,找了很多地方,大多数都是设置成按钮<Button>然后定义一个按钮的布局文件.xml在drawable中加入android:state_pressed,?android:state_focused之类的东西,但是我发现就算是不可点击的控件中设置了clickable,依然没有选中的功能,只有pressed按下变色。 具体链接:https://blog.csdn.net/u012422855/article/details/50799824 https://i.csdn.net/#/user-center/collection-list?type=1&folder=7931437&key=1 所以要么将控件直接定义成button,但是我倔强,因此我就想能不能在原有的控件上加一个透明的button,透明的button点击变色不就可以了? 事实证明是可以的,但是一开始我在button上的background设置成了@/null,虽然是透明的,但是没有办法实现我的需求,可能是@/null不能实现点击还是setbackgroundcolor还是什么原因吗我也没研究,换成了 android:background="@color/transparent" 搞定了。。。但是没有完全搞定 按钮需要添加flag来判断当前是选中的还是没有选中的,一个按钮选中了之后要把其他按钮设置回原来的颜色,按钮第二次点击要重置回原来的颜色,我一共就两个按钮,不上不下的也不太想为这两个添加一个list,想了想还是打算换个方法,添加了一个延时,让按钮在0.2秒之类改变颜色,然后恢复透明,由于我改变的只是按钮本身的颜色没有setTextColor,但是我的颜色很深接近黑色,反正0.2秒你能看得清个鬼,效果ok了。 else if (v.equals(aboutUsEnterBtn)) { aboutUsEnterBtn.setBackgroundColor(Color.parseColor("#141414")); new Thread() { @Override public void run() { super.run(); try { Thread.sleep(200);//休眠0.2秒 doActivity(AboutUsActivity.class); aboutUsEnterBtn.setBackgroundColor(Color.TRANSPARENT); baseActivity.finish(); } catch (InterruptedException e) { e.printStackTrace(); } } }.start(); Databinding也简单的说一下,项目的代码将页面的java部分分为model和activity两个部分,在model中要 public MainModel(BaseActivity baseActivity) { super(baseActivity); } public void setMainBindView(ActivityMainBinding activityMainBinding) { this.activityMainBinding = activityMainBinding; ……………………………… ……………………………… ……………………………… } 然后 在activity中, public class MainActivity extends BaseActivity { private MainDataModel mainDataModel; private ActivityMainDataBinding activityMainDataBinding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); activityPersonalDataBinding = ActivityPersonalDataBinding.inflate(getLayoutInflater()); setContentView(activityPersonalDataBinding.getRoot()); personalDataModel = new PersonalDataModel(this); personalDataModel.setActivityPersonalDataBinding(activityPersonalDataBinding); } public void onDestory() { super.finish();; } } databinding实现之后的按钮基本上都会自动识别,轻轻松松就初始化完成,还是比findItemById感觉上方便很多,当然如果只有一两个控件还是直接findItemById吧,没必要找麻烦炫技。 然后还有一个自动登录的问题,可以参考https://blog.csdn.net/lyl953147712/article/details/56840406 但是项目的代码是封装了的,直接使用 if (SPUtils.isLogin()) { doActivity(MainActivity.class); finish(); return; } 就直接获取权限跳转页面了,因为我的代码要涉及到退出登录,每次退出之后自动登录搞得我一度以为自己的功能有问题。 else if (v.equals(exitDrawerBtn)) { baseActivity.finish(); mainDrawerLayout.closeDrawer(GravityCompat.START); SPUtils.putIsLogin(false); doActivity(LoginActivity.class); } 其实只要调用一下设定false不让它自己自动跳就ok了。 最后是一个svn的问题,因为没有在安装android的时候绑定svn搞得提交代码的时候出错了,尴尬,而且给别人也带来了麻烦, https://blog.csdn.net/longxuanzhigu/article/details/82970953 可以参考这个来配置android studio的svn配置, 简单来说要取消勾选下面两个,?在地址栏写自己的svn 的bin的地址,安装svn 的时候要将所有的都勾选上,然后一般来说没什么问题了。 才刚刚开始踏上蛮长的android学习啊。。。 ? ? ? |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/28 12:02:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |