cannot.find.zip.align=The zipalign tool was not found in the SDK.
Please update to the latest SDK and re-export your application
or run zipalign manually.
Aligning applications allows Android to use application resources
more efficiently.
Run Code Online (Sandbox Code Playgroud)
这是我尝试发布应用时收到的消息.我正在使用Android SDK工具的最新版本(今天发布了23个)和SDK平台工具(今天也发布了20个).我得到了一个APK,但如果我尝试将其上传到Google Play,我会收到一个错误,抱怨它不是拉链对齐的.
运行zipalign手动修复apk,但是有谁知道是什么原因造成的,以及如何修复它?
在我的应用程序中,用户将选择应用程序随后处理的音频文件.问题是,为了让应用程序按照我想要的方式处理音频文件,我需要URI为文件格式.当我使用Android的原生音乐播放器在应用程序中浏览音频文件时,URI是一个内容URI,如下所示:
content://media/external/audio/media/710
Run Code Online (Sandbox Code Playgroud)
但是,使用流行的文件管理器应用程序Astro,我得到以下内容:
file:///sdcard/media/audio/ringtones/GetupGetOut.mp3
Run Code Online (Sandbox Code Playgroud)
后者对我来说更容易使用,但当然我希望应用程序具有用户选择的音频文件的功能,而不管他们用来浏览他们的集合的程序.所以我的问题是,有没有办法将content://样式URI转换为file://URI?否则,你会建议我解决这个问题?以下是调用选择器的代码,供参考:
Intent ringIntent = new Intent();
ringIntent.setType("audio/mp3");
ringIntent.setAction(Intent.ACTION_GET_CONTENT);
ringIntent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(ringIntent, "Select Ringtone"), SELECT_RINGTONE);
Run Code Online (Sandbox Code Playgroud)
我使用内容URI执行以下操作:
m_ringerPath = m_ringtoneUri.getPath();
File file = new File(m_ringerPath);
Run Code Online (Sandbox Code Playgroud)
然后用所述文件做一些FileInputStream.
Android Studio再次改变了它的项目结构......现在它已经改变了
project
---/app-module
---/manifests
---/res
---/java
Run Code Online (Sandbox Code Playgroud)
我一直在网上寻找,但我找不到资产文件夹的位置.当我尝试通过Android Studio中的目录查看器(右键单击,新建......目录)创建文件夹时,"目录"选项不可用.唯一可用的选项是:
Java Class
File
Module
Package
Image Asset
Run Code Online (Sandbox Code Playgroud)
这些都不会做我想要的.
有没有人想到这个?
我正在运行最新版本的gradle(1.12).在项目的根目录中,我运行以下命令,如@CommonsWare的回答所述,该命令应该给出依赖树:
当我运行它时,会发生这种情况:
$ gradle -q依赖项
------------------------------------------------------------
Root project
------------------------------------------------------------
No configurations
Run Code Online (Sandbox Code Playgroud)
该项目是一个Android gradle项目,使用Android Studio内置的新项目向导从头开始创建.我的顶级build.gradle文件如下所示:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.10.+'
}
}
allprojects {
repositories {
maven { url "http://dl.bintray.com/populov/maven" }
mavenCentral()
}
}
subprojects {
repositories {
flatDir {
dirs "$rootDir/libs"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的settings.gradle文件如下所示:
include ':app', ':facebook', 'pullToRefresh'
Run Code Online (Sandbox Code Playgroud)
据我所知,这是一个非常基本的gradle配置.有没有人知道为什么依赖树函数什么也没有返回?如果我需要提供更多信息,请告诉我.
我的应用程序包含一个视图,其中包含一个由少量片段组成的ViewPager.单击其中一个片段中的项目时,预期的行为是共享元素(在本例中为图像)转换为片段,该片段显示有关所单击内容的更多信息.
这是一个非常简单的视频,它应该是什么样子:
https://dl.dropboxusercontent.com/u/97787025/device-2015-06-03-114842.mp4
这只是使用片段 - >片段转换.
将起始片段放在ViewPager中时会出现问题.我怀疑这是因为ViewPager使用其父片段的子片段管理器,它与处理片段事务的活动的片段管理器不同.这是一个发生了什么的视频:
https://dl.dropboxusercontent.com/u/97787025/device-2015-06-03-120029.mp4
我非常肯定这里的问题,因为我上面解释的是子片段管理器与活动的片段管理器.以下是我进行转换的方式:
SimpleFragment fragment = new SimpleFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.am_list_pane, fragment, fragment.getClass().getSimpleName());
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
TransitionSet enterTransition = new TransitionSet();
enterTransition.addTransition(new ChangeBounds());
enterTransition.addTransition(new ChangeClipBounds());
enterTransition.addTransition(new ChangeImageTransform());
enterTransition.addTransition(new ChangeTransform());
TransitionSet returnTransition = new TransitionSet();
returnTransition.addTransition(new ChangeBounds());
returnTransition.addTransition(new ChangeClipBounds());
returnTransition.addTransition(new ChangeImageTransform());
returnTransition.addTransition(new ChangeTransform());
fragment.setSharedElementEnterTransition(enterTransition);
fragment.setSharedElementReturnTransition(returnTransition);
transaction.addSharedElement(iv, iv.getTransitionName());
}
transaction.addToBackStack(fragment.getClass().getName());
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
当两个片段都由活动的片段管理器管理时,这种方法很好,但是当我加载一个像这样的ViewPager时:
ViewPager pager = (ViewPager) view.findViewById(R.id.pager);
pager.setAdapter(new Adapter(getChildFragmentManager()));
Run Code Online (Sandbox Code Playgroud)
ViewPager的子项不是由活动管理的,它不再起作用.
这是Android团队的疏忽吗?有什么办法可以解决这个问题吗?谢谢.
我有一个GridView布局,可以动态添加或删除到网格.
在iOS中,GridView项目的本机行为是网格中的其他项目滑入已删除项目的位置,或者在添加新项目时滑动以腾出空间.
但是在Android上,行为只是为了立即弹出屏幕上的更改.我尝试使用GridView适配器中的一些技巧为每个getView()调用添加自定义动画,但这最终导致了一些问题:
当数据集发生变化时,Android GridView在后面的索引槽中加载0索引项
我尝试让各个视图控制动画而不是适配器的getView()方法,但最终结果是相同的.
我也尝试过使用GridLayoutAnimationController,如下所示:
Animation animation = AnimationUtils.loadAnimation(mActivity, R.anim.grid_item_fadein);
GridLayoutAnimationController controller = new GridLayoutAnimationController(animation, .2f, .2f);
mGrid.setLayoutAnimation(controller);
Run Code Online (Sandbox Code Playgroud)
这适用于所有GridView内容的初始加载,但对该内容的任何更改都会像默认情况一样立即弹出.
我觉得这是一个非常简单的功能,应该有一个更简单的方法来做到这一点.我在网上搜索时看到的最好的是一个库,它可以激活GridView中交换位置的GridView项目,但这不是我想要的(在同一个库中,当你通过删除从Grid中删除一个项目时)我试图避免的同样的即时效果发生).
关于SO的一个常见答案我也看到过"看看APIDemos,有很多例子." 但据我所知,实际上没有动画GridView内容更改的示例.
任何帮助表示赞赏,谢谢.
我正在寻找一种衡量Android活动实际内容区域尺寸的好方法.
获取显示始终有效.简单地说是这样的:
Display display = getWindowManager().getDefaultDisplay();
Run Code Online (Sandbox Code Playgroud)
您可以获得整个屏幕的像素数.当然,这不会考虑ActionBar,状态栏或任何其他会减少活动本身可用大小的视图.
活动运行后,您可以执行以下操作:
View content = getWindow().findViewById(Window.ID_ANDROID_CONTENT);
Run Code Online (Sandbox Code Playgroud)
仅获取活动内容.但是在onCreate()中执行此操作将导致宽度和高度为0,0的视图.
有没有办法在onCreate期间获得这些维度?我想应该有一种方法可以测量任何状态栏,并从总显示大小中减去,但我无法找到方法.我认为这是唯一的方法,因为内容窗口方法总是在绘制之前返回没有宽度/高度的视图.
谢谢!
尝试在我的应用程序中使用MultiDexApplication,但是当我尝试使用它扩展应用程序活动时,无法识别该类.
这是我的build.gradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion '21.0.1'
defaultConfig {
applicationId 'com.myapp'
minSdkVersion 10
targetSdkVersion 21
versionCode 115
versionName '4.8'
}
buildTypes {
debug {
debuggable true
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
debuggable false
runProguard true
zipAlign true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
lintOptions {
checkReleaseBuilds false
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.google.android.gms:play-services:6.1.11'
compile 'com.android.support:appcompat-v7:21.0.0'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.viewpagerindicator:library:2.4.1@aar'
compile project(':facebook')
} …Run Code Online (Sandbox Code Playgroud) 所以我知道相机在三星设备上的问题.您需要在调用相机意图之前创建一个Uri,如下所示:
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, m_username);
mImageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
Run Code Online (Sandbox Code Playgroud)
此示例为相机创建一个Uri来存储数据.我的应用程序在两个位置具有相机功能.两者都是相同的(直接复制粘贴),但在一个活动中,mImageUri对象在相机处理期间变为空,而在另一个活动中它不会.后者工作正常,但前者给出一个空值,这反过来阻止我保存图像,预览它等.我将提供下面的onResult代码:
case CAMERA_PIC_REQUEST :
if(resultCode == RESULT_OK) {
if(intent != null) {
//For non-Samsung devices
Log.e("Intent value:", intent.toString());
mImageUri = intent.getData();
}
mAvatar = BitmapStatic.createImage(mImageUri, this);
Drawable draw = new BitmapDrawable(getResources(), mAvatar);
m_photoButtonE.setImageDrawable(draw);
m_imageChanged = true;
}
break;
Run Code Online (Sandbox Code Playgroud)
以上示例来自工作活动.以下是不起作用的活动:
//On pressing the "Take Photo" button:
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, mUsername); …Run Code Online (Sandbox Code Playgroud) 我有一个包含三个项目的ViewPager.我正在尝试将ViewPager设置为查看最右边的页面(这将是第二个元素).这是返回一个IndexOutOfBounds异常,虽然我知道索引应该在边界内.这是完全堆栈:
02-22 12:22:50.256: E/AndroidRuntime(384): FATAL EXCEPTION: main
02-22 12:22:50.256: E/AndroidRuntime(384): java.lang.IndexOutOfBoundsException: index=1 count=0
02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.addInArray(ViewGroup.java:2050)
02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.addViewInner(ViewGroup.java:1994)
02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.addViewInLayout(ViewGroup.java:1958)
02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.addViewInLayout(ViewGroup.java:1939)
02-22 12:22:50.256: E/AndroidRuntime(384): at android.support.v4.view.ViewPager.addView(ViewPager.java:917)
02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.addView(ViewGroup.java:1828)
02-22 12:22:50.256: E/AndroidRuntime(384): at us.tagverse.pagertest.MasterActivity$PAdapter.instantiateItem(MasterActivity.java:518)
02-22 12:22:50.256: E/AndroidRuntime(384): at android.support.v4.view.PagerAdapter.instantiateItem(PagerAdapter.java:110)
02-22 12:22:50.256: E/AndroidRuntime(384): at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:649)
02-22 12:22:50.256: E/AndroidRuntime(384): at android.support.v4.view.ViewPager.populate(ViewPager.java:783)
02-22 12:22:50.256: E/AndroidRuntime(384): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1016)
02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.View.measure(View.java:8313)
02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
02-22 12:22:50.256: …Run Code Online (Sandbox Code Playgroud)