小编Pet*_*trS的帖子

Android导航栏覆盖了我的视图

我在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 overlay navigationbar

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

将项目迁移到新的实验性gradle插件

我尝试将我的Android项目迁移到新的实验性gradle插件.我按照页面上的说明操作.我对所需文件进行了更改,但是当我尝试使用gradle文件同步项目时出错.

错误:无法加载类'com.android.build.gradle.managed.ProductFlavor_Impl'.此意外错误的可能原因包括:

  • Gradle的依赖缓存可能已损坏(这有时会在网络连接超时后发生.)重新下载依赖项并同步项目(需要网络)
  • Gradle构建过程(守护程序)的状态可能已损坏.停止所有Gradle守护进程可以解决此问题.停止Gradle构建过程(需要重启)
  • 您的项目可能正在使用第三方插件,该插件与项目中的其他插件或项目请求的Gradle版本不兼容.
在损坏的Gradle进程的情况下,您还可以尝试关闭IDE,然后终止所有Java进程.

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

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

Android - 我的ListPreference中的自定义行布局

在我的Android应用程序中,我实现了SubtitleColorListPreference从中扩展而来的类ListPreference.我需要这个,因为我需要为列表中的每个项目设置自己的布局.一切正常,它看起来像这样:

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 listpreference preference-v7

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

毕加索 - 获取加载图像的路径

我在我的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加载了它.而且,我不知道 …

android picasso

5
推荐指数
0
解决办法
2038
查看次数

将类的实例插入到向量C++中

我创建了一个类Location,它是类City和的父类Village.我有一个vector<Location>,现在我需要插入CityVillage插入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编程,所以请帮助我.

c++ vector

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

C++重载operator <<用于子类

我创建了一个类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,CityLocation.它一直被称为重载operator << Location.我需要调用重载运算符VillageCity(取决于具体实例).是否有像虚拟方法类似的重载运算符?

我是用C++编程的新手,我是用Java编程的,所以请帮助我.提前致谢.

c++ operator-overloading

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

C++重载运算符==

我创建了一个类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城市有一个同名的城市.你能告诉我,问题出在哪里?谢谢.

c++ operator-overloading

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

Android应用程序中的OAuth

我需要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 truedefaultConfig部分build.gradle.第一个问题已经解决,但还有另一个问题:

错误:任务':app:packageAllDebugClassesForMultiDex'的执行失败.java.util.zip.ZipException:重复条目:android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat $ AccessibilityServiceInfoIcsImpl.class

我不知道如何修复它以及如何构建我的项目.你能帮我吗?提前致谢.

android oauth gradle android-multidex

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