IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 07:56:17  更:2021-07-28 07:57:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 9:35:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码