小编ilo*_*mbo的帖子

Android Dialog主题使图标太亮

我在Eclipse中创建了一个新的应用程序,目标是Jelly Bean.这是所有自动创建的代码.清单将应用程序主题设置为AppName:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    . . . 
Run Code Online (Sandbox Code Playgroud)

对于值dir中的样式,它转换为AppBaseTheme:

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="android:Theme.Light">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <!-- All customizations that are NOT specific to a particular API-level can go here. …
Run Code Online (Sandbox Code Playgroud)

icons android themes android-alertdialog

45
推荐指数
1
解决办法
1万
查看次数

Android Paint描边宽度定位

鉴于此代码绘制一条线:

Paint p;

p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setColor(android.graphics.Color.WHITE);
p.setStyle(Paint.Style.FILL);
p.setStrokeWidth(21);

canvas.drawLine(0,50,100,50,p);
Run Code Online (Sandbox Code Playgroud)

有3种可能的描笔策略:

  • 内部:线条画在矩形(0,50,100,70)
  • 中心:该线条绘制在矩形(0,40,100,60)
  • 外面:线条画在矩形(0,30,100,50)

在实践中,似乎默认行为遵循中心策略.是否可以修改油漆以产生与其他策略相对应的结果?

android drawing paint stroke

29
推荐指数
1
解决办法
2万
查看次数

获取样式属性中使用的可绘制引用的资源ID

拥有此自定义视图MyView我定义了一些自定义属性:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="MyView">
        <attr name="normalColor" format="color"/>
        <attr name="backgroundBase" format="integer"/>
    </declare-styleable>   
</resources>
Run Code Online (Sandbox Code Playgroud)

并在布局XML中将它们分配如下:

    <com.example.test.MyView
        android:id="@+id/view1"
        android:text="@string/app_name"
        . . .
        app:backgroundBase="@drawable/logo1"
        app:normalColor="@color/blue"/>
Run Code Online (Sandbox Code Playgroud)

起初我以为我可以backgroundBase使用以下方法检索自定义属性:

TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyView, defStyle, 0);
int base = a.getInteger(R.styleable.MyView_backgroundBase, R.drawable.blank);
Run Code Online (Sandbox Code Playgroud)

仅在未分配属性且R.drawable.blank返回默认值时才有效.
app:backgroundBase赋值时抛出异常"无法转换为整数类型= 0xn",因为即使自定义属性格式将其声明为整数,它实际上引用了a Drawable,应该按如下方式检索:

Drawable base = a.getDrawable(R.styleable.MyView_backgroundBase);
if( base == null ) base = BitMapFactory.decodeResource(getResources(), R.drawable.blank);
Run Code Online (Sandbox Code Playgroud)

这很有效.
现在我的问题:
我真的不想Drawable从TypedArray中获取,我想要对应的整数id app:backgroundBase(在上面的示例中它将是 R.drawable.logo1).我怎么才能得到它?

android custom-controls declare-styleable android-resources

27
推荐指数
1
解决办法
2万
查看次数

Android是否可以在XML文件中定义地图?

我试图定义一个利用资源的静态哈希表,但是由于无法静态访问资源而陷入困境.

然后我意识到,定义静态地图的最佳位置是资源文件本身.

如何在XML中定义地图?我相信如果可能的话,它应该类似于Listpreference机制,包含条目和条目值.

xml resources android map

22
推荐指数
4
解决办法
2万
查看次数

Android如何在IntentService上排队多个意图

关于IntentService的使用我有点困惑.

  1. 文档说IntentService将发送给它的所有意图排队并一次处理一个.
  2. 我看了一下IntentService代码,我看到onStartCommand()接收到intent,调用onStart()将它作为消息发送到intents队列

我很确定我在文档中读到somwhere只有系统调用onStartCommand()一次,如果你发出两次startService(),第二次调用不会导致调用onStartCommand().
我可能在这里错了,因为我一直在寻找这篇文档而我似乎无法找到它.
这与先前的概念相矛盾,该概念表明您可以通过onStartCommand()在IntentService中排队许多意图.

所以我在这里需要帮助,如何在IntentService上排队多个意图?

我只看到两个选项:

  • 只需使用不同的意图调用每次startService()

  • 直接调用onStart()onStartCommand()(绕过startService())

service android intentservice

14
推荐指数
1
解决办法
8340
查看次数

是否可以在静态上下文块中获取资源?

我想创建一个静态哈希表来将字符串转换为整数.需要注意的是,我想在XML文件中的几个列表中使用我定义为资源的字符串.

我只能使用资源ID写这个:

public class MyActivity extends Activity {

private static Map<Integer, Integer> views = new HashMap<Integer, Integer>();
static {
    views.put(R.string.full_text, MessageTable.VIEW_FULL);
    views.put(R.string.only_text, MessageTable.VIEW_MSG);
    views.put(R.string.tag_text, MessageTable.VIEW_TAGMSG);
}
Run Code Online (Sandbox Code Playgroud)

我没有错误,但我真正需要做的是这样的事情:

public class MyActivity extends Activity {

private static Map<String, Integer> views = new HashMap<String, Integer>();
static {
    views.put(getResources().getString(R.string.full_text), MessageTable.VIEW_FULL);
    views.put(getResources().getString(R.string.only_text), MessageTable.VIEW_MSG);
    views.put(getResources().getString(R.string.tag_text), MessageTable.VIEW_TAGMSG);
}
Run Code Online (Sandbox Code Playgroud)

这给了我在Eclipse中的以下错误:

Cannot make a static reference to the non-static method getResources() from the type ContextWrapper
Run Code Online (Sandbox Code Playgroud)

这个消息很有意义,但没有意义的是资源无法从静态块中访问,人们会认为静态变量是自定义创建的以利用资源.
我想我可以在对象构造函数中填充Hash表,但这意味着要在错误的位置执行它.

resources static android

13
推荐指数
2
解决办法
2万
查看次数

Android创建可附加到电子邮件的内存驻留输入文件

最终目标很快就会明确.

我想创建一个文件对象,而不是从真实的物理文件中获取数据,我想自己提供缓冲区.

然后,我想使用这个文件,它不是真正存在于SD卡中或我应用程序之外的任何地方,给它起一个名字并通过电子邮件作为附件发送(使用EXTRA_STREAM).

我发现以下一点代码,由Adriaan Koster(@adriaankoster),在Java中写入字节[]到文件

// convert byte[] to File
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
File fileFromBytes = (File) ois.readObject();
bis.close();
ois.close();

System.out.println(fileFromBytes);
Run Code Online (Sandbox Code Playgroud)

我用它来创建这个功能

private File fileFromBytes(byte[] buf) {
    File f = null;
    try {
        ByteArrayInputStream bis = new ByteArrayInputStream(buf);
        ObjectInputStream ois = new ObjectInputStream(bis);
        f = (File) ois.readObject();
        bis.close();
        ois.close();
    }
    catch (Exception e) {}
    return f;
}
Run Code Online (Sandbox Code Playgroud)

这就是我被卡住的地方,因为当我使用它时:

// When sent as body the mail is sent OK
// emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, dump());

// …
Run Code Online (Sandbox Code Playgroud)

email virtual android file

12
推荐指数
1
解决办法
4542
查看次数

Android确认对话框返回true或false

似乎没有简单的方法来获取Alert对话框来返回一个简单的值.
这段代码不起作用(答案变量不能在侦听器中设置,实际上它甚至不编译)

public static boolean Confirm(Context context) {
    boolean answer;
    AlertDialog dialog = new AlertDialog.Builder(context).create();
    dialog.setTitle("Confirmation");
    dialog.setMessage("Choose Yes or No");
    dialog.setCancelable(false);
    dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int buttonId) {
            answer = true;
        }
    });
    dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "No", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int buttonId) {
            answer = false;
        }
    });
    dialog.setIcon(android.R.drawable.ic_dialog_alert);
    dialog.show();
    return answer;
}
Run Code Online (Sandbox Code Playgroud)

注意:重要的是该方法是自包含的,即它不依赖于变量或外部的结构.只需打电话给你,得到你的答案,无论是真是假.

那么该怎么办?这个简单的返回的愿望假的似乎要复杂得多,值得.

此外,setButton方法具有以下形式:

dialog.setButton(int buttonId, String buttonText, Message msg)
Run Code Online (Sandbox Code Playgroud)

但目前尚不清楚如何使用它,发送到哪个meesage,使用哪个处理程序?

android dialog confirmation

12
推荐指数
3
解决办法
3万
查看次数

过滤后Android ListView数组索引越界

我认为这是专家的问题.

我从ListView数据列表中调用getView()positon 超出界限的调用. 当我使用适配器过滤器时会发生这种情况 过滤器方法使用小于原始列表的过滤列表填充数据. 当新筛选的列表比先前 筛选的列表短时,似乎发生错误.我更改了代码,在越界时返回一个虚拟convertView,只是为了查看发出了多少这样的调用.
publishResults()
getView()

这些是log我记录的相关代码和消息:

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // No logs here to keep ListView performance good
        Log.d(TAG, "+ getView( position=" + position + ")");
        ViewHolder holder;

        if( position >= mData.size() ) {
            // This code allows to see how many bad calls I get
            Log.w(TAG, "position out of bounds!");
            convertView = mInflater.inflate(mLayout, parent, false); …
Run Code Online (Sandbox Code Playgroud)

android listview filter android-arrayadapter

12
推荐指数
2
解决办法
8752
查看次数

Android制作由多个位图组成的可绘制XML

LinearLayout我的应用程序中有几个这样的背景:

android:background="@drawable/metal_plate"
Run Code Online (Sandbox Code Playgroud)

绘制\ metal_plate.xml:

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/diamond_metal"
    android:tileMode="repeat"
    android:dither="true">
</bitmap>    
Run Code Online (Sandbox Code Playgroud)

我想在金属板的4个角上放置4位螺丝.
我在几个地方使用金属板,所以我更喜欢把它定义为一个可绘制的,而不是每个ocasion放置4个螺丝RelativeLayout.

是否可以在drawable文件夹中定义XML以组合平铺金属板和4个螺钉?

xml android drawable

8
推荐指数
1
解决办法
1万
查看次数