| |
|
|
开发:
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年11日历 | -2025/11/27 5:29:06- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |