有没有办法精确检测设备类型(手机,平板电脑,手表,电视,汽车,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 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应用程序捆绑包。
我在设备上本地运行了一些测试,并且一切正常。但是,一旦部署到生产环境中,我开始看到一些类似以下的错误:
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捆绑包包含以下架构的拆分:
你有什么提示吗?
我是全球分发的应用程序的开发者.
我想使用自定义字体.目前它可以工作,但是当字体不支持字符时(例如西里尔字母或中文字符),系统会自动使用Roboto(或特定于设备的字体).
是否可以指定在不支持的字符上使用的另一种字体?
我正在尝试使用新的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)
这很好.我的问题是,当我在运行时添加新的首选项时,它们会使用旧主题进行膨胀.这是结果的屏幕截图:

如您所见,通过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
有一些代码在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绘制的情况下,绘制了两个位图(对于我的范围不正确,但是在正确的位置绘制并且具有正确的大小)
我在排序功能方面遇到了一些麻烦...这是我的代码:
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)