小编use*_*567的帖子

所选小部件的主题相关颜色

我很确定这个问题已经在某个地方得到了回答.这似乎太常见了.但我找不到答案.我也不能找出解决方案.

这是问题所在:

我希望我的一个TableRow具有不同的背景颜色.这很简单,我只需要添加

android:background="#123456" 
Run Code Online (Sandbox Code Playgroud)

在TableRow的XML声明中.但是,我也希望我的应用程序有两个主题.在另一个主题中,TableRow应该具有不同的背景颜色.我找不到在主题中定义颜色值并使用它的方法.我想输入这样的东西:

<style name="Theme.MyApp" parent="@style/Theme.Light">
   <color "my_cool_color">#123456</color>
</style>

<style name="Theme.MyApp.Dark" parent="@style/Theme.Dark">
   <color "my_cool_color">#654321</color>
</style>
Run Code Online (Sandbox Code Playgroud)

并且,在TableRow的声明中:

android:background="@color/my_cool_color"
Run Code Online (Sandbox Code Playgroud)

因此,当我更改主题时,TableRow的背景颜色也会发生变化.我已经尝试了很多个小时并且没有成功......我没有尝试的一件事是基于TableRow创建我自己的小部件并为它声明一个单独的样式 - 我认为这应该有用,但它是对于这么简单的问题来说,这太重了

android android-ui android-layout android-theme

18
推荐指数
1
解决办法
4580
查看次数

TransitionDrawable:完成后自动反向转换

我想高效地添加新添加的ListView项目.我认为这很简单容易,但我弄清楚了一个问题:

我想播放TransitionDrawable动画,一旦完成 - 回放它.新项目将在一段时间内升华,然后它将与其他项目融为一体.

TransitionDrawable具有向前和向后播放动画的方法,但没有可用于同步的方法.我期望有可能为动画完成指定回调,例如:

 TransitionDrawable transition = (TransitionDrawable) view.getBackground();
 transition.startTransition(500, new TransitionCompleteListener(){
               public void completed()
               { 
                    transition.reverseTransition(500);
               }
       });
Run Code Online (Sandbox Code Playgroud)

但是TransitionDrawable类不支持这样的东西.

问题是:如何播放TransitionDrawable动画,当它完成时 - 立即向后播放?我有一个使用Timer类来延迟执行动画后退部分的想法,但这个解决方案对于这么简单的事情来说看起来有点太重了.

或者也许我应该使用与TransitionDrawable不同的东西?我想避免使用Property Animations,因为我想支持更旧的设备(自从Honeycomb以来PA都是可用的).

android android-ui

9
推荐指数
1
解决办法
4934
查看次数

获取可调整大小的appwidget维度(或绕过它)

我为我的应用创建了一个很好的广角.它只显示从服务器下载的项目列表.嗯,确切地说,它看起来只是一个列表,因为较旧的Android版本(我想支持)不支持RemoteViews中的ListView.

我希望我的小部件显示最新项目列表,我希望这些项目占用所有可用的小部件空间.为了更好地展示我的问题,以免假设WLOG我想要一个具有所选节目的电视节目表的小部件.知道:

  • 从服务器下载成本很高
  • WLOG我们可以假设我可以下载的服务器上有Aleph零项
  • 电视时间表可能会有所变化,因此我们不想下载整整一个月的时间表,但最多只能下载半天
  • 显示的第一项将包含当前正在播放的节目

如果用户将调整大小以使其更大,我如何确保小部件底部不会有空白空间?我搜索了SO,似乎当​​用户更改小部件大小时(在ICS或自定义启动器上 - GO Launcher EX允许它),获取小部件的新维度是不可能的(纠正我,如果我错了).

但我真的不需要它们!我想知道有多少项适合小部件,从小部件的大小计算这只是方法之一.

所以,我问你是否有可能,例如,如果远程视图变得可见,或者创建自定义视图以便在RemoteViews中使用,这将允许我估计可见项目的数量.

如果不可能,我将只需要使用一些合理的默认值,但知道我可以显示多少行会很好.

android android-layout android-appwidget

9
推荐指数
1
解决办法
4134
查看次数

BackgroundColorSpan具有额外的垂直填充

在我的应用程序中,我的外观与GMail应用程序UI中的标签类似.对于那些可能不知道的人,他们看起来像这样(标签是这些彩色条):Gmail截图

为了达到类似的效果,我使用了九个补丁drawable - 对于每个标签我创建一个TextView并为其分配drawable.这是一个简单的解决方案,但我不喜欢它.它并不优雅,如分析器所示,它非常慢,而我认为这不是正确的方法.

我更改了UI的设计以使其更"ICS-y",因此我从标签中删除了圆角.我开始考虑如何替换9补丁解决方案.最明显的是使用BackgroundColorSpan.但它有一个小缺点.我希望我的标签有一些填充.有了drawables,很容易实现.有了跨度,就更难了.要进行水平填充,我可以在字符串的开头和结尾添加空格.但是如何使垂直填充更大?为了清理,这是BackgroundColorSpan标签的屏幕截图:

在此输入图像描述

我想让文字上方和下方的彩色部分变大.我想我应该使用某种MetricAffectingSpan,但我无法弄清楚哪一个.或者也许我应该写自己的?或者,最后,也许跨度只是无法满足我的需求,我应该留下图像或创建画布并"手动"绘制一切,如在GMail应用程序?

android android-ui

7
推荐指数
1
解决办法
905
查看次数

替换Chrome中的服务器JSON响应

我有一些基于Web的工具的问题,该工具以AJAX方式向服务器查询JSON数据.它运行不正常 - 返回的结果通常不是我想要的,我需要等待很长时间才能让服务器处理请求.

事实是我总是希望返回相同的数据(确切地说是一些人),所以我想到了伪造服务器响应.我试图通过几种方式实现这一目标,但没有成功.

我尝试使用Chrome的WebRequest功能 - 我准备了一个扩展程序,并将请求重定向到我的JSON编码的数据URL.它工作正常,但只有当我在Chrome的地址栏中手动输入地址时才有效.当Web应用程序尝试访问该地址时,静默重定向失败.我立即想到了Access Origin限制并快速设置了一个发送Access-Control-Allow-Origin标头的网络服务器.

不幸的是,这也没有用.当我手动输入地址时,服务器正在被查询并返回正确的JSON,但在应用程序中请求...默默地失败.看起来Chrome完全忽略了可能的Access-Control-Allow-Origin标头,因为它甚至没有查询服务器.Chrome很有可能只分析网址,因为我将有问题的请求重定向到应用领域中的随机网址.

我还尝试伪造应用程序的整个JavaScript文件 - 它使用相同的方法静态链接到文档(例如,它通过标准脚本标记包含).我失败了 - 重定向只是默默失败,就像我第一次尝试失败一样.

我的问题的一个常见解决方案是使用某种更改服务器输出的代理,但我不能这样做 - 我不想等待几分钟让服务器处理请求.顺便说一句,该应用只能通过HTTPS访问.

有没有其他方法可以用我的硬编码JSON提供应用程序?或者也许我错过了什么?

EDIT 插件代码,基于"catblock"示例:

chrome.webRequest.onBeforeRequest.addListener(
function(info) {
  console.log("AJAX call intercepted: " + info.url)
  return {redirectUrl: 'data:application/json,"test"'};
},
// filters
{
  urls: [
  "*://address.to.the.js.file.requested"
]
}, ['blocking']);
Run Code Online (Sandbox Code Playgroud)

清单文件,我只将域添加到权限部分:

{
"name": "CatBlock",
"version": "1.0",
"description": "I can't has cheezburger!",
"permissions": ["webRequest", "webRequestBlocking", 
              "*://some.domain.com/*"],
"background": {
  "scripts": ["background.js"]
},

"manifest_version": 2
}
Run Code Online (Sandbox Code Playgroud)

编辑2: 以下是Chrome开发者控制台网络面板的屏幕截图,显示请求被静默取消: 控制台截图 控制台截图

google-chrome google-chrome-extension

7
推荐指数
1
解决办法
8407
查看次数

更好的SQLite损坏检测

首先,一些背景:

我的Android应用程序有DB表,有很多四列行.它向服务器发送请求,服务器仅在所有这四个值都"有效"时才响应.数千名用户中的一些人报告说某些东西对他们不起作用(因为他们一段时间没有从服务器获得结果) - 我试图找出导致问题的原因,结果证明唯一可能的原因是未检测到的数据库损坏.

在ACRA日志中,我收到了一些带有SQL错误的消息,但这些消息是由于应用程序因为损坏而无法打开文件.这给了我一些线索,但我仍然不相信这是问题所在.所以,我创建了一个非常简单的Python脚本,它改变了DB文件中的随机字节,并检查SQLite将如何处理:

import random
import array
import sqlite3

db = array.array('B')
db.fromstring(open('db').read())

ta =  [x for x in sqlite3.connect('db').execute('SELECT * FROM table ORDER BY _id')]

results = [0,0,0,0]
tries = 1000

for i in xrange(0,tries):
    work = db[:]
    while work == db: 
        for j in xrange(0,random.randint(1,5)):
            work[random.randint(1,len(db))-1] = random.randint(0,255)

    work.tofile(open('outdb','w'))

    try:
        c = sqlite3.connect('outdb')
        results[0] += 1

        for r in c.execute('PRAGMA integrity_check;'):
        results[1] += 1 if (r[0] == 'ok') else 0 
    except:
        continue    

    try:
        results[3] …
Run Code Online (Sandbox Code Playgroud)

java sqlite android corrupt integrity

6
推荐指数
1
解决办法
1513
查看次数

在样式声明中指定时,不应用ListView分隔符

这更"为什么?" 比"怎么样?" 问题,因为我知道这个问题的一个简单的解决方法.但是我想知道我要描述的行为背后的逻辑是什么.

我有一个样式声明和一些ListViews.我想改变分频器的外观.我使用以下声明:

<style name="Theme.MyApp.Dark" parent="@style/Theme.Sherlock">
    <item name="android:dividerHeight">4px</item>
    <item name="android:divider">#123456</item>
</style>
Run Code Online (Sandbox Code Playgroud)

令我愉快的是,只应用了分隔器的高度.我已经尝试用alpha值(#12345678)和渐变drawable指定颜色,没有任何效果.ListViews声明如下:

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list"  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"/> 
Run Code Online (Sandbox Code Playgroud)

所以,正如你所看到的,没有任何东西可以覆盖样式声明.我只能在ListView声明中直接指定它时更改分隔符:

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list"  
    android:divider="#123456"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"/> 
Run Code Online (Sandbox Code Playgroud)

使用我新获得的根据所选主题指定颜色的技巧,我可以很容易地解决这个问题 - 我只需要android:divider为每个列表声明自定义颜色属性.

但为什么我不能改变android:divider风格,就像android:dividerHeight?这有什么理由吗?我找不到解释,错误报告或类似的东西,让我了解这种行为.

编辑:主题全局应用于清单文件:

<application android:icon="@drawable/icon" android:label="@string/app_name" android:name="org.my.app" android:theme="@style/Theme.MyApp.Dark">
Run Code Online (Sandbox Code Playgroud)

android

4
推荐指数
1
解决办法
2772
查看次数