• 关于

    xml动态android

    的搜索结果

问题

开源中国Android客户端的XML文件是怎么生成的? 400 报错

开源中国Android客户端的XML文件是怎么生成的? 400 报错 开源中国Android客户端的XML文件是怎么生成的,是在文章发表后,服务器自动生成一个xml文件存在数据库中还是在客户端请求时,...
爱吃鱼的程序员 2020-06-03 11:46:14 0 浏览量 回答数 1

问题

android中xml设置控件的属性和java文件里设置控件的属性有何不同

android中xml设置控件设置的属性和java文件里设置控件的属性有何不同是不是java文件里设置可以改变动态的改变控件位置,文字颜色,文字大小而在xml文件设置之后就无法改变那具体在java文件设置的属性是如何改变的呢...
51干警网 2019-12-01 19:41:33 1224 浏览量 回答数 1

回答

在阿里云控制台配置应用,获取到应用的appKey,appSecret,一般情况下只需要在项目的AndroidManifest.xml中添加如下设置: <meta-data android:name="com.alibaba.app.appkey" android:value="Your appKey" /> <meta-data android:name="com.alibaba.app.appsecret" android:value="Your appSecret" /> 为帮助用户在代码中实现动态注册,提供了动态注册的接口如下: /** * 动态设置appKey,appSecret的注册接口 * * @param context 应用上下文(需要ApplicationContext) * @param appKey * @param appSecret * @param callback 回调 */ void register(Context context, String appKey, String appSecret, CommonCallback callback) ;在阿里云控制台配置应用,获取到应用的appKey,appSecret,一般情况下只需要在项目的AndroidManifest.xml中添加如下设置: <meta-data android:name="com.alibaba.app.appkey" android:value="Your appKey" /> <meta-data android:name="com.alibaba.app.appsecret" android:value="Your appSecret" /> 为帮助用户在代码中实现动态注册,提供了动态注册的接口如下: /** * 动态设置appKey,appSecret的注册接口 * * @param context 应用上下文(需要ApplicationContext) * @param appKey * @param appSecret * @param callback 回调 */ void register(Context context, String appKey, String appSecret, CommonCallback callback) ;
保持可爱mmm 2020-03-27 23:17:42 0 浏览量 回答数 0

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

建个炫酷的简历网页,制作一个浪漫的表白网页,打造个人专属网盘,多种动手场景应用免费学!!!

问题

怎么动态改变 shape 中stroke 的宽度

&lt;?xml version="1.0" encoding="utf-8"?&gt; android:shape="oval" android:useLevel="false"&gt; &lt;solid android:color...
爵霸 2019-12-01 20:12:01 1007 浏览量 回答数 1

问题

android 读取 attr 资源:报错

在layout中: <TextView         android:id="@+id/textView1"         android:layout_width=...
kun坤 2020-06-08 19:15:16 0 浏览量 回答数 1

问题

动态设置spinner的值

我有一个ArrayAdapter,如下:ArrayAdapter<String>dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_...
蛮大人123 2019-12-01 20:02:01 1100 浏览量 回答数 1

回答

将数据库中的数据插入我的应用程序的XML代码中如何工作? 你不知道 您不能(或至少不应)直接编辑XML文件。另一方面,您可以使用View API将视图动态添加到用户在屏幕上看到的UI。实际上,RecyclerView就是为此目的而制成的。 就像在HTML中一样,您可以使用JS和PHP来插入和更改元素的值,但是如何在android中完成呢? 只是为了澄清您的意思,JS允许您向浏览器中呈现的DOM添加元素。它不是让你编辑从服务器加载原始HTML代码。同样,您无法在Android应用程序运行时在其中编辑XML代码。而是在应用程序运行时将视图添加到视图层次结构中。 我在想我必须从数据库中获取数据,将其解析为XML,然后将其分配给我需要包含在其中的元素,对吗? 需要说明的是,在您的应用程序运行时,您根本不使用XML。相反,您可以View使用Java或Kotlin 创建对象并将其添加到视图层次结构中。您应该首先了解RecyclerView在大多数情况下哪种功能可以满足您的需求。 回答来源:Stack Overflow
montos 2020-03-26 22:42:06 0 浏览量 回答数 0

问题

j2EE客户端 和android客户端之间的内容传递问题

做一个app服务端用的是j2EE维护一个mysql数据库,,客户端用android我想在动态生成一个SQLite小型数据库,现在存在的问题就是1:mysql数据库往客户端传递数据时候用的是什么格式json,还是xml,具体原因是什么。2:这...
杨冬芳 2019-12-01 20:16:27 724 浏览量 回答数 1

问题

android中怎么调用用style样式

平时做开发,通常style样式直接在xml布局文件中直接调用,如果我想直接在java代码中通过动态加载来设置,是否可以?通过查阅资料,很多说不可以,解决方式是把style中的逐条信息加载设置,还有其他途径可以设置吗?...
蛮大人123 2019-12-01 19:54:51 1087 浏览量 回答数 1

问题

android动画问题,XML写闪烁,动态代码写为什么不闪烁?

animationSet1 = new AnimationSet(true); animationSet2 = new AnimationSet(true); image2.setVisibility(View.VISIBLE); A...
爵霸 2019-12-01 19:38:19 1202 浏览量 回答数 1

问题

Android 获取电量,不实时改变,新手菜鸟求高手解答,谢谢?报错

因为是动态注册broadcast的,xml就没有做处理,在这里不附上了。 还有一个问题就是,加入onDestroy后退出时报错,提示没有注册,但已经是动态注册了啊。...
爱吃鱼的程序员 2020-06-22 14:29:04 0 浏览量 回答数 1

问题

android的NullPointException问题? 400 报错

android的NullPointException问题? 400 报错 log如下: java.lang.RuntimeException: Unable to start activity ComponentIn...
爱吃鱼的程序员 2020-06-05 12:03:05 0 浏览量 回答数 1

回答

亲,你明白了吗?   <ListView 73          android:layout_width="fill_parent" 74          android:layout_height="wrap_content" 75          android:text="header" 76          android:textSize="40dp" 77          android:id="@+id/section_list_view" 78          /> 应该改为:   <lzy.app.jobSystem.PinnedHeaderListView  73          android:layout_width="fill_parent" 74          android:layout_height="wrap_content" 75          android:text="header" 76          android:textSize="40dp" 77          android:id="@+id/section_list_view" 78          /> ######非常感谢,原来自己的标签要包名,没经验弄了一整天###### main.xml里面listview应该改成你自定义的吧######非常感谢,以前没见过添加自定义的标签,弄了一天原来要加包名才能实现###### 亲,只有PinnedHeaderListView 可以转为listView ,listView不可以转为PinnedHeaderListView 的。 @supperman 正解 ######谢谢哈哈,原来不能用这样方法拿出来,后来我用了代码动态插入那个ListView就好了。###### 引用来自“jacky2058”的评论 亲,只有PinnedHeaderListView 可以转为listView ,listView不可以转为PinnedHeaderListView 的。 @supperman 正解 目测楼主小白一只~######谢谢哈哈,原来不能用这样方法拿出来,后来我用了代码动态插入那个ListView就好了###### 这是什么 lzy.app.jobSystem. PinnedHeaderListView包名,lzy=楼主呀######haha,对啊,自己的项目包名
kun坤 2020-06-09 22:08:38 0 浏览量 回答数 0

回答

亲,你明白了吗?   <ListView 73          android:layout_width="fill_parent" 74          android:layout_height="wrap_content" 75          android:text="header" 76          android:textSize="40dp" 77          android:id="@+id/section_list_view" 78          /> 应该改为:   <lzy.app.jobSystem.PinnedHeaderListView  73          android:layout_width="fill_parent" 74          android:layout_height="wrap_content" 75          android:text="header" 76          android:textSize="40dp" 77          android:id="@+id/section_list_view" 78          /> ######非常感谢,原来自己的标签要包名,没经验弄了一整天######main.xml里面listview应该改成你自定义的吧######非常感谢,以前没见过添加自定义的标签,弄了一天原来要加包名才能实现###### 亲,只有 PinnedHeaderListView 可以转为listView ,listView不可以转为PinnedHeaderListView 的。 @supperman 正解 ######谢谢哈哈,原来不能用这样方法拿出来,后来我用了代码动态插入那个ListView就好了。###### 引用来自“jacky2058”的评论 亲,只有 PinnedHeaderListView 可以转为listView ,listView不可以转为PinnedHeaderListView 的。 @supperman 正解 目测楼主小白一只~######谢谢哈哈,原来不能用这样方法拿出来,后来我用了代码动态插入那个ListView就好了######这是什么 lzy.app.jobSystem. PinnedHeaderListView包名,lzy=楼主呀######haha,对啊,自己的项目包名
kun坤 2020-06-10 09:28:30 0 浏览量 回答数 0

问题

Android中Context context=MainActivity.this是什么意义

具体如下bt.setOnClickListener(new View.onClickListener(){ @Override public void onClick(View v){ Context context=MainActi...
爵霸 2019-12-01 19:51:25 1250 浏览量 回答数 2

问题

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'Rec

我正在尝试实现一个recyclerview持有人以动态添加和删除卡。但是,为什么在尝试将cardview动态添加到recyclerview时却得到null指针异常? MAINACTIVITY.JAVA此类负责动...
LiuWH 2020-01-19 09:34:18 5 浏览量 回答数 1

问题

Android开发动态TextView问题报错求解答 ?报错

两个画图界面,我想在第一个界面上加入一个TextView动态显示当前整点温度数据的数值 下面这个是XML文件控件声明 下面是我画折线的类 下面是我在这个类下面写的setText ![ 然后安装后画曲线的界面就不动...
爱吃鱼的程序员 2020-06-23 15:44:17 0 浏览量 回答数 1

问题

【Android学习全家桶】155道Android热门问题,阿里百位技术专家答疑解惑

阿里极客公益活动:或许你挑灯夜战只为一道难题或许你百思不解只求一个答案或许你绞尽脑汁只因一种未知那么他们来了,阿里系技术专家来云栖问答为你解答技术难题了他们用户自己手中的技术来帮助用户成长本次活动特邀百位阿里技术专家对android常见问题...
管理贝贝 2019-12-01 20:07:24 2181 浏览量 回答数 2

问题

我无法在表格视图内设置按钮宽度

我正在做一个android应用程序,我必须在表行内动态放置一个按钮。问题是我创建的按钮被拉伸,如下图所示: 屏幕截图 我还在下面放置了一些应用程序代码,以便您可以更好地理解。 p...
montos 2020-03-26 11:25:30 0 浏览量 回答数 1

问题

Gradle批量打包时怎么动态改变manifest文件中的渠道号?:报错

@打杂程序猿 你好,想跟你请教个问题: 根据我查的资料,在Gradle批量打包时,需要在build文件中增加 buildTypes { hiapk ...
kun坤 2020-06-06 14:54:39 0 浏览量 回答数 1

回答

动态换肤在很多android应用中都有使用,用户根据自己的喜好设置皮肤主题,可以增强用户使用应用的舒适度。 Android换肤可以分为很多种,它们从使用方式,用户体验以及项目框架设计上体现了明显的差异。 接下来几篇文章分别讲解其中比较主流的换肤方式。应用内置皮肤实现动态切换在技术上是最容易实现的,但有很多局限性,比如不能在使用过程中增减皮肤,除非升级应用,扩展性很弱;如果需要设置皮肤的位置很多,编码起来比较麻烦。主要是使用 SharedPreferences记录当前设置的皮肤序号,然后加载这套皮肤的所有资源,在每个activity中有一个setSkin()的方法设置皮肤。实现:确定需要换肤的地方 首先要确定应用中那些界面需要换肤,他们有什么共性?比如天天动听,一套以蓝色为基调的皮肤,所有的界面title应该是蓝色的,所有的按钮也是蓝色系列的…,这样就可以确定一套皮肤需要哪些颜色以及资源文件。 确定一套皮肤需要的资源(其余皮肤按照第一套皮肤模板做) 比如首页,四个模块,其中 本地音乐和 最近播放 的颜色是一样的,这里需要两个颜色值(正常和按下状态),歌曲下载 和 MV下载 的颜色是一样的,这里也需要两个颜色值,每个界面的标题背景色相同,然后一些按钮也需要两个颜色值;综合起来就需要7个色值,在color.xml文件中定义好它们,然后再drawable目录定义好选择器。 (以下是Demo中的代码片段,真实项目开发中只需要按照这个步骤模板做就行)编写SkinUtil资源加载类使用皮肤 在Application中初始化皮肤工具类定义BaseActivity实现setSkin()方法设置皮肤源码下载https://github.com/openXu/SkinChange1
杨冬芳 2019-12-02 03:00:03 0 浏览量 回答数 0

回答

随着移动互联网大潮的快速发展,开源中国社区作为国内大型IT技术人员社区也推出了手机移动客户端,覆盖iOS,Android以及Windows Phone这三个手机平台。主要为了能让我们的用户能随时随地的与开源中国社区的用户进行交流与互动。我们需要App实现什么? 参考当前已经存在的IT类资讯App,阅读新闻是肯定不能少的。可是只能阅读新闻肯定也是不行的,因为我们发现程序员是一种独特的人群。程序员与程序员之间有聊不完的话题,他们更容易把自己的兴趣集中在编程与技术问题上,甚至会因为一个小小的技术问题或者IT界的话题而争论不休。 OSChina.NET本身相比于其他IT编程网站而言,社交性质更加明显,比如动弹与个人空间的动态与提到我 ,以及粉丝与关注的好友等等。所以在App的功能体系设计之初我们当然把重心偏在社交这一块。 在智能机上运行的App与OSChina.NET网站相比当然不可能什么功能都包括,对于手机上普遍不到4寸的屏幕而言,显示代码段自然就是一个非常令人头疼的问题,因为普通文章只要通过换行就能解决,但是程序代码动不动换行只会给浏览用户带来无尽的烦恼,这一点我相信各位都很有感触。所以代码分享区不会做进App里。 App几个重点实现方式: 1,这里专门说下登陆的处理,大家都知道去年CSDN的密码泄露事件吧,为了防止这种事情,OSChina.NET对所有用户登陆强行使用SSL登陆的方式来加密传输数据。所以我们的三种手机客户端都是采用https登陆的方式实现的。 2,基于Http传输的数据格式基于XML,大家可能会问为什么不用最流行的JSON来作为序列化与反序列化规范,考虑到两者实际带宽消耗相差不大,所以暂时仅仅支持XML格式http传输数据,当然不排除未来会加入JSON支持。 3,大家都知道App是可以发带图片的动弹的,对于手机应用来说这一点非常重要,因为我们都很喜欢那种拍照就发送的即时分享感觉,可是一般手机拍下来的图片都是巨大无比的,这对于上传到服务器以及让其他人浏览都很不方便,所以我们这里针对三个客户端都做了缩图处理,在图片质量与体积大小的权衡上找到最佳的平衡点。4,动态的处理,整个App中最复杂的应该算是动态列表的显示了,这里必须使用富文本控件来显示,在我开发iOS版本的时候首先使用第三方的FTRichTextView控件,可是它有很多问题,性能消耗过大不说还容易在列表控件中消失,直到后来找到新的替代品RTLabel才真正解决这个问题,相反在Windows Phone以及Android的处理上很容易就解决了富文本的显示OK,以上几点只是我们在开发过程中碰到的一小部分问题,我们会在后续的系列文章中分享整个App制作过程中碰到的一些难题与最后解决方案的心得!
杨冬芳 2019-12-02 03:00:16 0 浏览量 回答数 0

问题

Android应用安全开发之浅谈网页打开APP

Android应用安全开发之浅谈网页打开APP 作者:伊樵,呆狐,舟海@阿里移动安全 一、网页打开APP简介 Android有一个特性,可以通过点击网页...
移动安全 2019-12-01 21:38:40 7991 浏览量 回答数 0

回答

android 程序的入口activity能更改和指定。 你打开android project的AndroidManifest.xm或者喜欢反编译的话打开apk里面的AndroidManifest.xml文件,一开始便是指定:<manifest xmlns:android="http://schemas.android.com/apk/res/android"       package="com.i3nu.sprofile"  //package名、包名       android:versionCode="1" //版本码       android:versionName="1.0"> //版本名     <application android:icon="@drawable/icon" android:label="@string/app_name"> //指定项目程序的图标、名称         <activity android:name=".SProfileActivity"                    android:label="@string/app_name">             <intent-filter>                 <action android:name="android.intent.action.MAIN" /> //此处表示该Activity是主程序                 <category android:name="android.intent.category.LAUNCHER" /> //此处表示该Activity是入口             </intent-filter>         </activity>######SProfileActivity 就是你入口 Activity 的类名。###### 引用来自#3楼“IBM DW”的帖子 SProfileActivity 就是你入口 Activity 的类名。 SProfileActivit可以改成别的名称么?若可以使可以的,该怎样改?? 重新再创建一个太麻烦,还得改很多东西? 谢谢######如果你想把一个Activity指定为主程序以及入口,只要将该程序的名称如上所示替换掉你建项目时生成的即可。###### 引用来自#5楼“何世友”的帖子 如果你想把一个Activity指定为主程序以及入口,只要将该程序的名称如上所示替换掉你建项目时生成的即可。 SProfileActivit可以改成别的名称么?若可以使可以的,该怎样改?? 重新再创建一个太麻烦,还得改很多东西? 我的意思是只更改这个Activity的名称,比如把SProfileActivit改为MainActivity,只改名称,若在程序里直接改会报错的,并且要改动很多地方(一用到这个Activity),我就是想改只一次名称就把all全改过来了,不知道可以么?? ###### 引用来自#6楼“xiaolu369”的帖子 引用来自#5楼“何世友”的帖子 如果你想把一个Activity指定为主程序以及入口,只要将该程序的名称如上所示替换掉你建项目时生成的即可。 SProfileActivit可以改成别的名称么?若可以使可以的,该怎样改?? 重新再创建一个太麻烦,还得改很多东西? 我的意思是只更改这个Activity的名称,比如把SProfileActivit改为MainActivity,只改名称,若在程序里直接改会报错的,并且要改动很多地方(一用到这个Activity),我就是想改只一次名称就把all全改过来了,不知道可以么?? 在eclipse里改通过refactor它会自动更新引用的。不知道你尝试过没有。一般主程序是引用其他类的,你怎么让其他类引用太多主程序呢?难道是Intent等?###### 引用来自#7楼“何世友”的帖子 引用来自#6楼“xiaolu369”的帖子 引用来自#5楼“何世友”的帖子 如果你想把一个Activity指定为主程序以及入口,只要将该程序的名称如上所示替换掉你建项目时生成的即可。 SProfileActivit可以改成别的名称么?若可以使可以的,该怎样改?? 重新再创建一个太麻烦,还得改很多东西? 我的意思是只更改这个Activity的名称,比如把SProfileActivit改为MainActivity,只改名称,若在程序里直接改会报错的,并且要改动很多地方(一用到这个Activity),我就是想改只一次名称就把all全改过来了,不知道可以么?? 在eclipse里改通过refactor它会自动更新引用的。不知道你尝试过没有。一般主程序是引用其他类的,你怎么让其他类引用太多主程序呢?难道是Intent等? 谢谢!还有个问题,refactor—>layout中的.xml文件的名称不太管用,还得到对应activity中进行更改!这个只能是这样么,还是?###### 引用来自#8楼“xiaolu369”的帖子 引用来自#7楼“何世友”的帖子 引用来自#6楼“xiaolu369”的帖子 引用来自#5楼“何世友”的帖子 如果你想把一个Activity指定为主程序以及入口,只要将该程序的名称如上所示替换掉你建项目时生成的即可。 SProfileActivit可以改成别的名称么?若可以使可以的,该怎样改?? 重新再创建一个太麻烦,还得改很多东西? 我的意思是只更改这个Activity的名称,比如把SProfileActivit改为MainActivity,只改名称,若在程序里直接改会报错的,并且要改动很多地方(一用到这个Activity),我就是想改只一次名称就把all全改过来了,不知道可以么?? 在eclipse里改通过refactor它会自动更新引用的。不知道你尝试过没有。一般主程序是引用其他类的,你怎么让其他类引用太多主程序呢?难道是Intent等? 谢谢!还有个问题,refactor—>layout中的.xml文件的名称不太管用,还得到对应activity中进行更改!这个只能是这样么,还是? 这个我了解的只能这样。。ADT没有针对这方面的优化,还有待大牛赐教。不过一般而言,对于layout folder里的文件的引用不会超过一个activity吧?###### 引用来自#9楼“何世友”的帖子 引用来自#8楼“xiaolu369”的帖子 引用来自#7楼“何世友”的帖子 引用来自#6楼“xiaolu369”的帖子 引用来自#5楼“何世友”的帖子 如果你想把一个Activity指定为主程序以及入口,只要将该程序的名称如上所示替换掉你建项目时生成的即可。 SProfileActivit可以改成别的名称么?若可以使可以的,该怎样改?? 重新再创建一个太麻烦,还得改很多东西? 我的意思是只更改这个Activity的名称,比如把SProfileActivit改为MainActivity,只改名称,若在程序里直接改会报错的,并且要改动很多地方(一用到这个Activity),我就是想改只一次名称就把all全改过来了,不知道可以么?? 在eclipse里改通过refactor它会自动更新引用的。不知道你尝试过没有。一般主程序是引用其他类的,你怎么让其他类引用太多主程序呢?难道是Intent等? 谢谢!还有个问题,refactor—>layout中的.xml文件的名称不太管用,还得到对应activity中进行更改!这个只能是这样么,还是? 这个我了解的只能这样。。ADT没有针对这方面的优化,还有待大牛赐教。不过一般而言,对于layout folder里的文件的引用不会超过一个activity吧? 说的也是啊,谢谢###### 引用来自#10楼“xiaolu369”的帖子 引用来自#9楼“何世友”的帖子 引用来自#8楼“xiaolu369”的帖子 引用来自#7楼“何世友”的帖子 引用来自#6楼“xiaolu369”的帖子 引用来自#5楼“何世友”的帖子 如果你想把一个Activity指定为主程序以及入口,只要将该程序的名称如上所示替换掉你建项目时生成的即可。 SProfileActivit可以改成别的名称么?若可以使可以的,该怎样改?? 重新再创建一个太麻烦,还得改很多东西? 我的意思是只更改这个Activity的名称,比如把SProfileActivit改为MainActivity,只改名称,若在程序里直接改会报错的,并且要改动很多地方(一用到这个Activity),我就是想改只一次名称就把all全改过来了,不知道可以么?? 在eclipse里改通过refactor它会自动更新引用的。不知道你尝试过没有。一般主程序是引用其他类的,你怎么让其他类引用太多主程序呢?难道是Intent等? 谢谢!还有个问题,refactor—>layout中的.xml文件的名称不太管用,还得到对应activity中进行更改!这个只能是这样么,还是? 这个我了解的只能这样。。ADT没有针对这方面的优化,还有待大牛赐教。不过一般而言,对于layout folder里的文件的引用不会超过一个activity吧? 说的也是啊,谢谢 在程序中动态的更改入口的activity,怎样实现的???
kun坤 2020-06-11 14:05:11 0 浏览量 回答数 0

问题

阿里聚安全攻防挑战赛第三题Android PwnMe解题思路

大家在聚安全挑战赛正式赛第三题中,遇到android app 远程控制的题目。我们今天带你一探究竟,如何攻破这道题目。 一、题目 购物应用pwn (6分) 环境&#x...
移动安全 2019-12-01 21:52:44 2439 浏览量 回答数 0

问题

阿里聚安全攻防挑战赛第三题Android PwnMe解题思路

大家在聚安全挑战赛正式赛第三题中,遇到android app 远程控制的题目。我们今天带你一探究竟,如何攻破这道题目。 一、题目 购物应用pwn (6分) 环境&#x...
移动安全 2019-12-01 21:52:46 3267 浏览量 回答数 0

问题

阿里巴巴5大移动/前端开源项目你知道几个?

阿里巴巴已有73款活跃的开源项目,目前Weex、JStorm和RocketMQ已捐赠给Apache基金会,尤其是Weex成为中国移动领域的首个Apache顶级项目。阿里巴巴5大移动/前端开源项目Freeline、...
爵霸 2019-12-01 21:56:01 4777 浏览量 回答数 0

问题

阿里巴巴5大移动/前端开源项目你知道几个?

阿里巴巴已有73款活跃的开源项目,目前Weex、JStorm和RocketMQ已捐赠给Apache基金会,尤其是Weex成为中国移动领域的首个Apache顶级项目。阿里巴巴5大移动/前端开源项目Freeline、...
爵霸 2019-12-01 21:55:57 2783 浏览量 回答数 0

问题

大家客观的评价下,多谢 热? 400 报错

大家客观的评价下,多谢 热? 400 报错 我是做android开发的工作一年半了,新换的一家创业公司,teamleader是老板一起带来的,每天说话大呼小叫,公司是他自...
爱吃鱼的程序员 2020-06-04 14:31:40 1 浏览量 回答数 1

回答

XML 配置首先,先写一套UI界面出来,上方左边是两个 TextView,右边是两个 CheckBox,下方是一个 RecyclerView ,实现很简单,这里我不贴代码了。 接着,在 styles 文件中添加两个 Theme,一个是日间主题,一个是夜间主题。它们的属性都是一样的,唯一区别在于颜色效果不同。 <!--白天主题--> <style name="DayTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="clockBackground">@android:color/white</item> <item name="clockTextColor">@android:color/black</item> </style> <!--夜间主题--> <style name="NightTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/color3F3F3F</item> <item name="colorPrimaryDark">@color/color3A3A3A</item> <item name="colorAccent">@color/color868686</item> <item name="clockBackground">@color/color3F3F3F</item> <item name="clockTextColor">@color/color8A9599</item> </style> 需要注意的是,上面的 clockTextColor 和 clockBackground 是我自定义的 color 类型属性<?xml version="1.0" encoding="utf-8"?> <attr name="clockBackground" format="color" /> <attr name="clockTextColor" format="color" /> 然后再到所有需要实现夜间模式功能的 xml 布局文件中,加入类似下面设置,比如我在 RecyclerView 的 Item 布局文件中做了如下设置 稍稍解释下其作用,如 TextView 里的 android:textColor="?attr/clockTextColor" 是让其字体颜色跟随所设置的 Theme。到这里,xml 需要做的配置全部完成,接下来是 Java 代码实现了。Java 代码实现大家可以先看下面的实现代码,看不懂的童鞋可以边结合我代码下方实现思路解说。 package com.clock.study.activity; import ... /** 夜间模式实现方案* @author Clock @since 2016-08-11*/ public class DayNightActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener { private final static String TAG = DayNightActivity.class.getSimpleName(); /**用于将主题设置保存到SharePreferences的工具类**/ private DayNightHelper mDayNightHelper; private RecyclerView mRecyclerView; private LinearLayout mHeaderLayout; private List<RelativeLayout> mLayoutList; private List<TextView> mTextViewList; private List<CheckBox> mCheckBoxList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); supportRequestWindowFeature(Window.FEATURE_NO_TITLE); initData(); initTheme(); setContentView(R.layout.activity_day_night); initView(); } private void initView() { mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); mRecyclerView.setLayoutManager(layoutManager); mRecyclerView.setAdapter(new SimpleAuthorAdapter()); mHeaderLayout = (LinearLayout) findViewById(R.id.header_layout); mLayoutList = new ArrayList<>(); mLayoutList.add((RelativeLayout) findViewById(R.id.jianshu_layout)); mLayoutList.add((RelativeLayout) findViewById(R.id.zhihu_layout)); mTextViewList = new ArrayList<>(); mTextViewList.add((TextView) findViewById(R.id.tv_jianshu)); mTextViewList.add((TextView) findViewById(R.id.tv_zhihu)); mCheckBoxList = new ArrayList<>(); CheckBox ckbJianshu = (CheckBox) findViewById(R.id.ckb_jianshu); ckbJianshu.setOnCheckedChangeListener(this); mCheckBoxList.add(ckbJianshu); CheckBox ckbZhihu = (CheckBox) findViewById(R.id.ckb_zhihu); ckbZhihu.setOnCheckedChangeListener(this); mCheckBoxList.add(ckbZhihu); } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { int viewId = buttonView.getId(); if (viewId == R.id.ckb_jianshu) { changeThemeByJianShu(); } else if (viewId == R.id.ckb_zhihu) { changeThemeByZhiHu(); } } private void initData() { mDayNightHelper = new DayNightHelper(this); } private void initTheme() { if (mDayNightHelper.isDay()) { setTheme(R.style.DayTheme); } else { setTheme(R.style.NightTheme); } } /** * 切换主题设置 */ private void toggleThemeSetting() { if (mDayNightHelper.isDay()) { mDayNightHelper.setMode(DayNight.NIGHT); setTheme(R.style.NightTheme); } else { mDayNightHelper.setMode(DayNight.DAY); setTheme(R.style.DayTheme); } } /** * 使用简书的实现套路来切换夜间主题 */ private void changeThemeByJianShu() { toggleThemeSetting(); refreshUI(); } /** * 使用知乎的实现套路来切换夜间主题 */ private void changeThemeByZhiHu() { showAnimation(); toggleThemeSetting(); refreshUI(); } /** * 刷新UI界面 */ private void refreshUI() { TypedValue background = new TypedValue();//背景色 TypedValue textColor = new TypedValue();//字体颜色 Resources.Theme theme = getTheme(); theme.resolveAttribute(R.attr.clockBackground, background, true); theme.resolveAttribute(R.attr.clockTextColor, textColor, true); mHeaderLayout.setBackgroundResource(background.resourceId); for (RelativeLayout layout : mLayoutList) { layout.setBackgroundResource(background.resourceId); } for (CheckBox checkBox : mCheckBoxList) { checkBox.setBackgroundResource(background.resourceId); } for (TextView textView : mTextViewList) { textView.setBackgroundResource(background.resourceId); } Resources resources = getResources(); for (TextView textView : mTextViewList) { textView.setTextColor(resources.getColor(textColor.resourceId)); } int childCount = mRecyclerView.getChildCount(); for (int childIndex = 0; childIndex < childCount; childIndex++) { ViewGroup childView = (ViewGroup) mRecyclerView.getChildAt(childIndex); childView.setBackgroundResource(background.resourceId); View infoLayout = childView.findViewById(R.id.info_layout); infoLayout.setBackgroundResource(background.resourceId); TextView nickName = (TextView) childView.findViewById(R.id.tv_nickname); nickName.setBackgroundResource(background.resourceId); nickName.setTextColor(resources.getColor(textColor.resourceId)); TextView motto = (TextView) childView.findViewById(R.id.tv_motto); motto.setBackgroundResource(background.resourceId); motto.setTextColor(resources.getColor(textColor.resourceId)); } //让 RecyclerView 缓存在 Pool 中的 Item 失效 //那么,如果是ListView,要怎么做呢?这里的思路是通过反射拿到 AbsListView 类中的 RecycleBin 对象,然后同样再用反射去调用 clear 方法 Class<RecyclerView> recyclerViewClass = RecyclerView.class; try { Field declaredField = recyclerViewClass.getDeclaredField("mRecycler"); declaredField.setAccessible(true); Method declaredMethod = Class.forName(RecyclerView.Recycler.class.getName()).getDeclaredMethod("clear", (Class<?>[]) new Class[0]); declaredMethod.setAccessible(true); declaredMethod.invoke(declaredField.get(mRecyclerView), new Object[0]); RecyclerView.RecycledViewPool recycledViewPool = mRecyclerView.getRecycledViewPool(); recycledViewPool.clear(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } refreshStatusBar(); } /** * 刷新 StatusBar */ private void refreshStatusBar() { if (Build.VERSION.SDK_INT >= 21) { TypedValue typedValue = new TypedValue(); Resources.Theme theme = getTheme(); theme.resolveAttribute(R.attr.colorPrimary, typedValue, true); getWindow().setStatusBarColor(getResources().getColor(typedValue.resourceId)); } } /** * 展示一个切换动画 */ private void showAnimation() { final View decorView = getWindow().getDecorView(); Bitmap cacheBitmap = getCacheBitmapFromView(decorView); if (decorView instanceof ViewGroup && cacheBitmap != null) { final View view = new View(this); view.setBackgroundDrawable(new BitmapDrawable(getResources(), cacheBitmap)); ViewGroup.LayoutParams layoutParam = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); ((ViewGroup) decorView).addView(view, layoutParam); ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, "alpha", 1f, 0f); objectAnimator.setDuration(300); objectAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); ((ViewGroup) decorView).removeView(view); } }); objectAnimator.start(); } } /** * 获取一个 View 的缓存视图 * * @param view * @return */ private Bitmap getCacheBitmapFromView(View view) { final boolean drawingCacheEnabled = true; view.setDrawingCacheEnabled(drawingCacheEnabled); view.buildDrawingCache(drawingCacheEnabled); final Bitmap drawingCache = view.getDrawingCache(); Bitmap bitmap; if (drawingCache != null) { bitmap = Bitmap.createBitmap(drawingCache); view.setDrawingCacheEnabled(false); } else { bitmap = null; } return bitmap; } } 实现思路和代码解说: DayNightHelper 类是用于保存夜间模式设置到 SharePreferences 的工具类,在 initData 函数中被初始化,其他的 View 和 Layout 都是界面布局,在 initView 函数中被初始化;在 Activity 的 onCreate 函数调用 setContentView 之前,需要先去 setTheme,因为当 View 创建成功后 ,再去 setTheme 是无法对 View 的 UI 效果产生影响的;onCheckedChanged 用于监听日间模式和夜间模式的切换操作; refreshUI 是本实现的关键函数,起着切换效果的作用,通过 TypedValue 和 Theme.resolveAttribute 在代码中获取 Theme 中设置的颜色,来重新设置控件的背景色或者字体颜色等等。需要特别注意的是 RecyclerView 和 ListView 这种比较特殊的控件处理方式,代码注释中已经说明,大家可以看代码中注释;refreshStatusBar 用于刷新顶部通知栏位置的颜色; showAnimation 和 getCacheBitmapFromView 同样是本实现的关键函数,getCacheBitmapFromView 用于将 View 中的内容转换成 Bitmap(类似于截屏操作那样),showAnimation 是用于展示一个渐隐效果的属性动画,这个属性作用在哪个对象上呢?是一个 View ,一个在代码中动态填充到 DecorView 中的 View(不知道 DecorView 的童鞋得回去看看 Android Window 相关的知识)。知乎之所以在夜间模式切换过程中会有渐隐效果,是因为在切换前进行了截屏,同时将截屏拿到的 Bitmap 设置到动态填充到 DecorView 中的 View 上,并对这个 View 执行一个渐隐的属性动画,所以使得我们能够看到一个漂亮的渐隐过渡的动画效果。而且在动画结束的时候再把这个动态添加的 View 给 remove 了,避免了 Bitmap 造成内存飙升问题。 作者:D_clock爱吃葱花链接:https://www.jianshu.com/p/3b55e84742e5
auto_answer 2019-12-02 01:49:54 0 浏览量 回答数 0

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 阿里云AIoT