小编P.M*_*lch的帖子

如何强制元数据值键入字符串?

我在manifest.xml中指定了一个元数据,如下所示:

<meta-data android:value="5555555555" android:name="foo"></meta-data>
Run Code Online (Sandbox Code Playgroud)

访问元数据时,如下所示:

ActivityInfo ai = act.getPackageManager().getActivityInfo(componentName, PackageManager.GET_META_DATA);
Object value = (Object)ai.metaData.get(key);
Run Code Online (Sandbox Code Playgroud)

这个值被解释为int - 更重要的是 - 错误地解释为(1260588259).

由于类型是由构建系统(布尔值,整数,浮点数和字符串)自动确定的,我想知道是否有任何方法可以强制数据类型为字符串.

我尝试在末尾添加一个空格("5555555555"),但随后该值被解释为5.5555553E9 float!).

我也尝试使用getString而不是get,但是返回null.

有任何想法吗?TIA.

android android-manifest

23
推荐指数
2
解决办法
7020
查看次数

在缩放的画布上测量文本

我一直在努力学习文本测量和缩放画布.

当画布未缩放时,getTextBounds和measureText可以提供准确的结果.但是,当缩放画布时,两种方法都不会提供与打印文本的实际大小相匹配的结果.

为了测试,我使用以下onDraw方法创建了View的子类:

final float scaling = 0.51f;
final int fontSize = 50;

canvas.scale(scaling, scaling);
font = Typeface.create("Arial", Typeface.NORMAL);

Paint paint = new Paint();
paint.setColor(0xff4444ff);
paint.setTypeface(font);
paint.setTextSize(fontSize);
paint.setAntiAlias(true);

int x = 10;
int y = 100;
final String text = "Lorem ipsum dolor sit amet, consectetur adipisici elit...";
canvas.drawText(text, x, y, paint);

// draw border using getTextBounds

paint.setColor(0xffff0000);
paint.setStyle(Paint.Style.STROKE);
paint.setTypeface(font);
paint.setTextSize(fontSize);
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
bounds.offset(x, y);
paint.setColor(0x80ffff00);
canvas.drawRect(bounds, paint);

// draw border using measureText …
Run Code Online (Sandbox Code Playgroud)

fonts android canvas measure typeface

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

GLSurfaceView onDrawFrame清除行为

我使用GLSurfaceView遇到了不同的行为.AFAIK是程序的责任,清除每帧的缓冲区(颜色和深度).这意味着如果我不清除缓冲区,我会得到最后一帧的内容(或者之前用于双缓冲的内容).

似乎无论在某些设备上是什么,缓冲区都被清除了.我在Addison Wesley OpenglES2.0编程指南中对一些具有不同结果的测试设备进行了"Hello Triangle"程序的以下修改:

  • Acer Iconia A500(4.0.3):清除(预期行为)
  • Sony XPERIA Go(4.0.4):已清除
  • Galaxy S3(4.1.1):清除
  • LG Optimus 4x HD(4.0.3):清除
  • 三星Galaxy Tab 20.1(4.0.4):清除
  • 摩托罗拉Xoom(3.2):清除
  • Galaxy S2(4.1.2 - rooted):清除

有没有办法强制在每个绘制回调中获得一个未更改的缓冲区?

清除屏幕的设备的结果如下所示: 清除屏幕 未清除的屏幕 - 预期的行为

测试活动如下所示:

package com.example.glcleartest;

import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.opengl.GLES20;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;

public class MainActivity extends Activity {

protected static final int NUM_VERTICES = 3;

@Override
protected void onCreate(Bundle savedInstanceState) …
Run Code Online (Sandbox Code Playgroud)

android opengl-es glsurfaceview opengl-es-2.0

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

内存过滤器用于内存类

有没有办法在Android市场中隐藏属于特定内存类设备的应用程序?例如.我只想为具有32或更高内存级别的设备(AcivityManager.getMemoryClass())发布应用程序.

<uses-configuration>标记仅具有与屏幕/键盘相关的标记,<uses-feature>也没有与内存相关的设置.

有没有其他方法为应用程序指定必要的设备属性?

memory android filter google-play

5
推荐指数
1
解决办法
252
查看次数

由于显式设置,Nexus 7不兼容

我的应用程序未显示在Nexus 7上.播放商店控制台在设备列表中显示Nexus 7:

Unsupported devices due to your manifest settings:

Nexus 7(grouper)"
Run Code Online (Sandbox Code Playgroud)

我的清单看起来像这样:

...

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14">
</uses-sdk>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.android.vending.BILLING" />

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<compatible-screens>
    <screen android:screenSize="normal" android:screenDensity="mdpi"/>
    <screen android:screenSize="normal" android:screenDensity="hdpi"/>
    <screen android:screenSize="normal" android:screenDensity="xhdpi"/>

    <screen android:screenSize="large" android:screenDensity="ldpi"/>
    <screen android:screenSize="large" android:screenDensity="mdpi"/>
    <screen android:screenSize="large" android:screenDensity="hdpi"/>
    <screen android:screenSize="large" android:screenDensity="xhdpi"/>

    <screen android:screenSize="xlarge" android:screenDensity="ldpi"/>
    <screen android:screenSize="xlarge" android:screenDensity="mdpi"/>
    <screen android:screenSize="xlarge" android:screenDensity="hdpi"/>
    <screen android:screenSize="xlarge" android:screenDensity="xhdpi"/>
</compatible-screens>

...
Run Code Online (Sandbox Code Playgroud)

我不需要相机,这似乎是通常的不兼容问题的情况.我没有使用该supports-screens条目(我想排除所有小屏幕设备,以及ldpi普通设备,这是不可能使用支持屏幕条目AFAIK).

什么可能是什么问题?

一个有趣的细节可能是nexus …

android nexus-7

5
推荐指数
1
解决办法
6344
查看次数

包含 .so 文件时,Android 应用程序包生成的 APK 大小很大

我有一个项目,其中包含几个特定于 cpu 架构的 .so 文件 - 最大的是 xwalk lib,v8a 版本为 60MB,v7a 版本为 37MB。

当我们拆分 APK 时,arm-v7a 应用程序 apk 版本大约为 38mb,arm-v8a apk 大约为 41mb,这是有道理的 - 压缩 lib 将分别产生 23MB 和 20MB。

使用 app bundle 时,似乎生成的 APK 根本没有压缩。将 60MB 和 37MB 添加到 apk 大小几乎没有变化,导致 64 位 arm 设备的 apk 为 97MB。

当使用 bundletool 为一个特定设备生成 apk 以及从内部应用测试播放商店站点下载时,我得到一致的结果,该站点返回 apk 也取决于设备。

我是否在这里遗漏了一些东西,或者在包含 .so 文件时应用程序包不是最佳选择,最好再次使用拆分 APK?

android android-ndk android-app-bundle

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