我在Nexus等设备上遇到Android导航栏的问题.只需在所有没有硬件菜单按钮的设备上.
让我更详细地解释一下这个问题.
我有一个应用程序,其中有3个部分.内容,ActionBar和带有SeekBar的底部面板.

带有SeekBar的ActionBar和底部面板覆盖了内容.每次我点击内容时,ActionBar和带有SeekBar的底部面板都会消失.这完全符合它的工作方式.这是我用于隐藏系统UI的代码片段:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE);
} else {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
actionBar.hide();
}
findViewById(R.id.read_book_bottom_bar).setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)
在onCreate我的活动方法中,我有这段代码:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我在具有Android导航栏的设备上启动应用程序时,使用SeekBar显示底部面板时出现问题.简单来说,Android导航栏使用SeekBar覆盖底部面板.这是一个截图:

但每次我点击内容时,Android导航栏都会随着ActionBar和带有SeekBar的底部面板一起消失.所以,问题在于,每当有人想在NEXUS等设备上使用底层面板和SeekBar时,他/她将无法使用它,因为它隐藏在Android导航栏下.
有人可以帮我解决这个问题吗?谢谢大家.
我尝试将我的Android项目迁移到新的实验性gradle插件.我按照此页面上的说明操作.我对所需文件进行了更改,但是当我尝试使用gradle文件同步项目时出错.
错误:无法加载类'com.android.build.gradle.managed.ProductFlavor_Impl'.此意外错误的可能原因包括:
在损坏的Gradle进程的情况下,您还可以尝试关闭IDE,然后终止所有Java进程.
- Gradle的依赖缓存可能已损坏(这有时会在网络连接超时后发生.)重新下载依赖项并同步项目(需要网络)
- Gradle构建过程(守护程序)的状态可能已损坏.停止所有Gradle守护进程可以解决此问题.停止Gradle构建过程(需要重启)
- 您的项目可能正在使用第三方插件,该插件与项目中的其他插件或项目请求的Gradle版本不兼容.
build.gradle在我的app文件夹中非常类似于:
apply plugin: 'com.android.model.application'
apply plugin: 'maven'
repositories {
maven {
url = getBaseRepository()
credentials {
username = NEXUS_USERNAME
password = NEXUS_PASSWORD
}
}
mavenCentral()
}
def int CACHE_LIMIT = CACHE_CHANGING_MODULES_FOR_SECONDS.toInteger()
configurations.all {
resolutionStrategy.cacheChangingModulesFor CACHE_LIMIT, 'seconds'
}
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.0"
defaultConfig.with {
applicationId = "<myRealAppIdIsHere>"
minSdkVersion.apiLevel = 14
targetSdkVersion.apiLevel = 18
multiDexEnabled = true
}
}
android.buildTypes {
debug {
/*buildConfigField.with { …Run Code Online (Sandbox Code Playgroud) android gradle build.gradle android-gradle-plugin gradle-plugin
在我的Android应用程序中,我实现了SubtitleColorListPreference从中扩展而来的类ListPreference.我需要这个,因为我需要为列表中的每个项目设置自己的布局.一切正常,它看起来像这样:
重要的代码在方法中onPrepareDialogBuilder(AlertDialog.Builder builder),我自己设置ListAdapter.
@Override
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
// some other code is here ...
ListAdapter listAdapter = new SubtitleColorAdapter(getContext(), R.layout.subtitle_color_preference_item, colorNameHolders, index, this);
builder.setAdapter(listAdapter, this);
}
Run Code Online (Sandbox Code Playgroud)
现在,我需要使用PreferenceFragmentCompat而不是PreferenceFragment,所以我SubtitleColorListPreference必须扩展android.support.v7.preference.ListPreference.这就是问题 - 这里没有onPrepareDialogBuilder方法ListPreference.另外,我没有找到任何类似的方法.我试图找到一些如何创建自定义的示例android.support.v7.preference.ListPreference,但没有成功.有谁知道我该如何解决这个问题?
我在我的Android应用程序中使用Picasso从URL加载图像.这些图像以某些形式显示ListView.当用户点击其中的某个项目时ListView,我需要创建Intent与所选图像的共享.
我使用以下代码创建共享意图:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(localPath));
shareIntent.putExtra(Intent.EXTRA_TEXT, mUrl);
shareIntent.setType("image/jpg");
startActivity(Intent.createChooser(shareIntent, getString(R.string.label_share)));
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,有一个局部变量localPath.此变量必须包含图像路径.我认为Picasso有一些缓存,其中存储了下载的图像.有什么办法可以检索所选图像的路径吗?
更新:部分解决方案
最后,我找到了一个适合我的解决方案.但我不知道,如果这是一个正确的解决方案,或者存在更好的解决方案.
我创建了一个实现com.squareup.picasso.Target接口的类,在方法中onBitmapLoaded(Bitmap bitmap, LoadedFrom from)我提供了这个实现:
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
mImageView.setImageBitmap(bitmap);
mImageUri = getBitmapUri(bitmap, mName));
}
private Uri getBitmapUri(Bitmap bitmap, String title) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(mContext.getContentResolver(), bitmap, title, null);
return Uri.parse(path);
}
Run Code Online (Sandbox Code Playgroud)
在那之后,mImageUri我可以通过分享意图.也许这部分代码对某些人有用.
但我不知道是否存在更好的解决方案.在我的解决方案中,我必须存储Bitmap在磁盘上,但也许磁盘上已有相同的图像,因为Picasso加载了它.而且,我不知道 …
我创建了一个类Location,它是类City和的父类Village.我有一个vector<Location>,现在我需要插入City或Village插入vector.我试过以下例子:
vector<Location> locations;
locations.push_back(new City("New York", 9000, 1, 2));
Run Code Online (Sandbox Code Playgroud)
要么
vector<Location> locations;
Location* loc = new City("New York", 9000, 1, 2);
locations.push_back(loc);
Run Code Online (Sandbox Code Playgroud)
但没有任何作用.你能给我一个建议吗?我不是C++程序员,我正在用Java编程,所以请帮助我.
我创建了一个类Location,它是类Village和的父类City.我有一个vector<Location*>,包含村庄和城市.现在,我需要打印到标准输出的内容vector.这很简单:
for (int i = 0; i < locations.size(); i++)
cout << locations.at(i);
Run Code Online (Sandbox Code Playgroud)
我已经重载了operator << for classes Village,City和Location.它一直被称为重载operator << Location.我需要调用重载运算符Village和City(取决于具体实例).是否有像虚拟方法类似的重载运算符?
我是用C++编程的新手,我是用Java编程的,所以请帮助我.提前致谢.
我创建了一个类Location.这个类是类City和的父类Village.这Location门课是抽象的.我创建了一个vector<Location*> locations包含城市和村庄的地方.Location包含一个名字.如果两个位置具有相同的名称,则表示它们是相同的.我已经超负荷运营商==的Location.
bool operator==(const Location& lhs) const
{
return (this->mName.compare(lhs.mName) == 0);
}
Run Code Online (Sandbox Code Playgroud)
如果我想添加一些位置vector,我首先检查这个位置是否不存在.我用这个函数:
bool checkLocation(Location* l) {
return find(locations.begin(), locations.end(), l) != locations.end();
}
Run Code Online (Sandbox Code Playgroud)
例如,如果我想在其中添加一些城市vector,则上述方法仍会返回false,这意味着Location不存在.但是在这个vector城市有一个同名的城市.你能告诉我,问题出在哪里?谢谢.
我需要OAuth在我的Android应用程序中使用协议.我决定使用android-oauth-client.在我的build.gradle档案中,我有:
dependencies {
compile 'com.android.support:appcompat-v7:21.0.0'
compile 'com.wu-man:android-oauth-client:0.0.3'
}
Run Code Online (Sandbox Code Playgroud)
使用gradle文件同步项目工作正常,但是当我尝试构建我的应用程序时,存在一个问题:
错误:任务':app:dexDebug'的执行失败.com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:进程'命令'C:\ Program Files\Java\jdk1.7.0_51\bin\java.exe''以非完成零退出值2
我发现,我应该尝试添加multiDexEnabled true的defaultConfig部分build.gradle.第一个问题已经解决,但还有另一个问题:
错误:任务':app:packageAllDebugClassesForMultiDex'的执行失败.java.util.zip.ZipException:重复条目:android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat $ AccessibilityServiceInfoIcsImpl.class
我不知道如何修复它以及如何构建我的项目.你能帮我吗?提前致谢.