小编Spo*_*ght的帖子

正确检测Android设备类型

有没有办法精确检测设备类型(手机,平板电脑,手表,电视,汽车,PC)?

现在,我找到了一种方法来检测应用程序是在汽车(uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_CAR),电视(uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION)或手表(uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_WATCH)上运行.这是对的吗?连接到汽车的手机是显示为手机还是"Android Auto"?

为了区分手机,平板电脑或计算机,我可以检查最小屏幕尺寸(600dp,例如平板电脑或笔记本电脑).

现在的问题是区分平板电脑和笔记本电脑.你有什么想法吗?

PS:我不是要求它制作响应式用户界面,这是一个与帐户设备管理相关的问题

android

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

Android Studio处理SNAPSHOT依赖项

通过在Android Studio 3.0.1上使用SNAPSHOT依赖项,我遇到了一些麻烦.我也试过Android Studio 3.1,同样的问题依然存在.

我通过以下方式包含依赖项:

dependencies {
    configurations.all {
        resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
        resolutionStrategy.cacheDynamicVersionsFor 0, 'seconds'
    }
    implementation('com.example:lib:0.0.1-SNAPSHOT') { changing = true }
}
Run Code Online (Sandbox Code Playgroud)

发布新版本的库时,如果单击"刷新所有Gradle项目"图标,则应用程序构建正常.但是,Android Studio在快照中看不到任何更改.

我已经尝试重启Android Studio并使其缓存无效,没有任何区别.

如何让Android Studio了解这些变化?

android gradle maven android-studio android-gradle-plugin

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

使用应用程序捆绑包,我得到UnsatisfiedLinkError的用户不到1%

我正在尝试使用新的Android应用程序捆绑包。

我在设备上本地运行了一些测试,并且一切正常。但是,一旦部署到生产环境中,我开始看到一些类似以下的错误:

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/xyz/base.apk"],nativeLibraryDirectories=[/data/app/xyz/lib/arm, /vendor/lib, /system/lib]]] couldn't find "libsqlite3x.so"
java.lang.Runtime.loadLibrary (Runtime.java)
java.lang.System.loadLibrary (System.java)
io.requery.android.database.sqlite.SQLiteDatabase.<clinit> (SQLiteDatabase.java:86)
io.requery.android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked (SQLiteOpenHelper.java:241)
io.requery.android.database.sqlite.SQLiteOpenHelper.getReadableDatabase (SQLiteOpenHelper.java:199)
...
Run Code Online (Sandbox Code Playgroud)

错误指出我正在使用的库(requery / sqlite-android)无法找到所需的.so文件。这似乎很奇怪,因为我检查了bundletool,在每个APK中都有文件.so。

该错误发生在两个设备上:分别运行Android 6和5的Samsung Galaxy Note 7和TECNO-J8。

根据Play商店的说法,该错误是通过Google Play安装的应用程序发生的,因此我怀疑该错误与APK侧载有关。


生成的APK捆绑包包含以下架构的拆分:

  • splits \ base-armeabi_v7a.apk
  • splits \ base-mips.apk
  • splits \ base-arm64_v8a.apk
  • splits \ base-x86_64.apk
  • splits \ base-x86.apk

你有什么提示吗?

android android-studio android-app-bundle

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

Android上的字体后备

我是全球分发的应用程序的开发者.

我想使用自定义字体.目前它可以工作,但是当字体不支持字符时(例如西里尔字母或中文字符),系统会自动使用Roboto(或特定于设备的字体).

是否可以指定在不支持的字符上使用的另一种字体?

fonts android typeface

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

新的Preference支持库在运行时不正确的主题

我正在尝试使用新的Preference v14支持库.为了给首选项提供材质样式,我在Activity上使用以下样式:

<style name="PreferenceTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
Run Code Online (Sandbox Code Playgroud)

这很好.我的问题是,当我在运行时添加新的首选项时,它们会使用旧主题进行膨胀.这是结果的屏幕截图:

WTF

如您所见,通过XML添加的第一个首选项具有新的Material样式,而其他首选项则没有.

您对如何解决问题有任何暗示吗?

编辑 这是我用来在运行时添加首选项的代码示例:

import android.support.v7.preference.ListPreference;

for (...) {
        final ListPreference p = new ListPreference(getActivity());
        p.setTitle(name);
        p.setSummary(langname);
        p.setEntryValues(langEntryValues);
        p.setEntries(langDisplayValues);
        p.setDialogTitle(R.string.select_language);

        category.addPreference(p);
    }
Run Code Online (Sandbox Code Playgroud)

PS:出现相同的行为 android.support.v7.preference.Preference

android android-preferences android-fragments android-support-library preferencefragment

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

ICS上的Android PorterDuffXfermode

有一些代码在Android 2.2上完美运行,但在Android 4中只生成黑色视图.这是onDraw方法:

//Object initialization
Paint paint=new Paint();
PorterDuffXfermode exclude=new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT);


paint.setAntiAlias(true);
paint.setDither(true);


//The dimensions are OK and they are at the center of the screen
canvas.drawBitmap(mask, screenWidth / 2 - pixelsToSp(100), screenHeight / 2 - pixelsToSp(100), paint);



paint.setXfermode(exclude);
//PS:targetRect is a portion of screen
canvas.drawBitmap(source, null, targetRect, p);
paint.setXfermode(null);
Run Code Online (Sandbox Code Playgroud)

PS:掩码和聚光灯是两个位图.

在没有设置Xfermode绘制的情况下,绘制了两个位图(对于我的范围不正确,但是在正确的位置绘制并且具有正确的大小)

android paint android-4.0-ice-cream-sandwich

3
推荐指数
1
解决办法
1405
查看次数

在c ++中排序类的向量

我在排序功能方面遇到了一些麻烦...这是我的代码:

class Parola {
public:
    string s;
    int repetition;
    bool operator()(const Parola *x, const Parola *y) {
        return x->repetition > y->repetition;
    }
};


int main(int argc, char** argv) {
    ...
    vector<Parola> p;
    ...
    some insertions here
    ...
    sort(p.begin(), p.end(), Parola());
    ...
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么我不能没有错误地编译它?非常感谢!

PS:我只会告诉你超过五十个错误的前三行:

/usr/include/c++/4.2.1/bits/stl_algo.h: In function 'const _Tp& std::__median(const _Tp&, const _Tp&, const _Tp&, _Compare) [with _Tp = Parola, _Compare = Parola]':
/usr/include/c++/4.2.1/bits/stl_algo.h:2795:   instantiated from 'void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Parola*, std::vector<Parola, std::allocator<Parola> > …
Run Code Online (Sandbox Code Playgroud)

c++ sorting class vector

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