小编Yoa*_*uet的帖子

File.createTempFile()VS new File()

在我的应用程序中,我添加了为日常添加和保存图片的可能性,以a表示Fragment.

为了将图片保存在SD卡上,我目前使用的功能是File.createTempFile:

File imageFile = File.createTempFile(imageFileName, MyApplication.JPEG_FILE_SUFFIX, MyApplication.getAlbumDir());
Run Code Online (Sandbox Code Playgroud)

我实际上也尝试过标准方式:

File imageFile = new File(MyApplication.getAlbumDir(), imageFileName + MyApplication.JPEG_FILE_SUFFIX);
Run Code Online (Sandbox Code Playgroud)

两者都有效,但在我的情况下,第一个比第二个更好,因为该函数createTempFile在文件名的末尾添加一个长的随机数,使其唯一.

举个例子,这是我用两种方法得到的:

使用createTempFile:IMG_2013-06-18_-1961144729.jpg

使用新文件:IMG_2013-06-18_.jpg

最后我的问题是,保持使用createTempFile以保存我的照片是否安全,或者我是否必须使用标准方式并添加一些代码来生成唯一的文件名?它应该只用于临时文件吗?

我查看了有关该功能的文档,但我没有找到任何关于使用它而不是使用它的可能后果new File.

谢谢

android android-file

47
推荐指数
3
解决办法
4万
查看次数

值,值-v11和值-v14文件夹的样式和主题

我目前正在开发我的应用程序,将其设计基于Holo主题.在全球范围内我想要做的是工作,但我对工作文件夹的方式有点困惑values,values-v11并且values-v14.

所以我知道:

  • values 目标API低于11
  • values-v11 目标是11到13之间的API
  • values-v14 目标API优于13

起初我以为我必须为每个文件夹指定应用程序所需的所有样式,但后来我意识到了一种继承系统.

我的问题是我真的很困惑,并且不清楚如何在这3个文件夹之间进行这种继承.

我做了以下测试,以便查看手机上的行为(在Android 4.0上运行,因此该文件夹values-v14应该是加载的文件夹):

values我有一个样式设置为蓝色文本颜色:

<style name="TextMedium" parent="@android:style/TextAppearance.Medium">
    <item name="android:textColor">@color/Blue</item>
Run Code Online (Sandbox Code Playgroud)

values-v11我有一个样式设置为白色文本颜色:

<style name="TextMedium" parent="@android:style/TextAppearance.Medium">
    <item name="android:textColor">@color/White</item>
Run Code Online (Sandbox Code Playgroud)

values-v14我有一个样式设置为红色文本颜色:

<style name="TextMedium" parent="@android:style/TextAppearance.Medium">
    <item name="android:textColor">@color/Red</item>
Run Code Online (Sandbox Code Playgroud)

对于上面的第一种情况(每个文件夹具有不同的颜色),我的文本上加载的颜色为红色,表示values-v14文件夹获得优先级.

然后,如果我从values-v14文件夹中注释掉红色样式,则文本变为白色.这是否意味着values-v11即使设备定位到values-v14文件夹,系统也会采用文件夹中的样式?我认为它可能values默认使用该文件夹但不是values-v11.

更一般地说,我的问题是,这三个文件夹是作为父母和孩子工作吗?意思是:

  • 如果该设备上的API版本> 13运行时,系统将加载values-v14然后values-v11,最后values.
  • 如果设备在11到13之间的API上运行,系统将加载values-v11然后values.
  • 如果设备运行的API版本<11,系统将仅加载values.

如果它确实是它的工作方式,那么在父文件夹中设置最大样式values并在v11或v14中只添加特定的样式是否有意义?

很抱歉这个很长的问题,我希望很清楚,这个主题/样式系统只在Android指南中简要描述,很难找到有关它如何工作的信息......

谢谢你的帮助!

android android-theme android-styles

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

操作栏 - ifRoom选项留下太多空间

我的操作栏上有问题,我尝试在其上设置搜索视图,以便使搜索栏可扩展.

这很好,除了我必须使用选项设置所有其他菜单项,ifRoom以便在单击搜索图标时让搜索字段占据所有空间.

这部分也运行良好,除了太多的菜单项被推入菜单溢出,垂直屏幕上只剩下2个图标(包括搜索栏).

我对另一个有5个菜单项的活动做了另一个测试:

  1. 在第一种情况下,我将所有这些设置为 android:showAsAction="always"
  2. 在第二种情况下,我将所有这些设置为``android:showAsAction ="ifRoom"`

结果如下:

情况1:

永远的情况

案例2:

ifRoom案例

为什么我使用ifRoom,只显示2个图标,而实际上5个可以轻松填满这个地方?

因此,我的搜索视图项旁边只有一个菜单项...

谢谢!

android android-actionbar android-search

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

Android Studio中的"noinspection"关键字列表

在Android Studio中,我有时会使用这种注释来禁用我已经处理的特定代码行上的检查警告,例如:

if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
    //noinspection deprecation
    textView.setBackgroundDrawable(ContextCompat.getDrawable(mContext, R.drawable.calendar_item_separator));
} else {
    textView.setBackground(ContextCompat.getDrawable(mContext, R.drawable.calendar_item_separator));
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我使用了关键字"deprecation",但我找不到可用关键字的完整列表.

有人发现了吗?

谢谢!

android android-studio

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

Admob原生广告:无效的NativeAdManager类型.发现:qa; 必需:NativeAdManager

我发布这个问题,希望有人可能找到这个bug的解决方法.

使用来自Admob的新Native Express广告正在发生这种情况,但是下面的崩溃频繁发生(可能是1%的用户):

Invalid NativeAdManager type. Found: qa; Required: NativeAdManager.
Run Code Online (Sandbox Code Playgroud)

此Google论坛中已提出此错误:https://groups.google.com/forum/#!topic / google- admob -ads-sdk/xcRD_bEL9YA

Admob团队已经知道这个错误超过3周,但没有更正......

更新:几天后,也出现了类似的错误:

Invalid NativeAdManager type. Found: com.google.android.gms.ads.internal.o; Required: NativeAdManager.
Run Code Online (Sandbox Code Playgroud)

android admob

13
推荐指数
0
解决办法
325
查看次数

禁用时,从属首选项显示错误的颜色字体

在我的应用程序中,我使用了几个首选项,包括一些使用以下属性与依赖项相关的首选项:android:dependency="pref_key".

基本上,如果未选中该复选框,则会禁用以下所有其他首选项:

没有样式定义的首选项

当我在自定义主题中设置以下3行时,会出现问题:

<style name="AppThemeOrange" parent="@style/AppTheme">
        <item name="android:textColorPrimary">@color/OrangeMain</item>
        <item name="android:textColorSecondary">@color/OrangeDark</item>
        <item name="android:textColorTertiary">@color/OrangeLight</item>
(...)
Run Code Online (Sandbox Code Playgroud)

在这3个属性上定义的颜色也会覆盖禁用的首选项的默认字体颜色:

带样式定义的首选项

首选项仍然被禁用,但显示的字体相反相反...

我搜索了默认的Holo Light样式和主题,但我不知道这个定义的位置以及为什么上面的样式会覆盖这些样式.

有没有人遇到过这个问题?

android android-preferences android-theme android-styles

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

片段生命周期中的onCreateOptionsMenu

我在Fragment生命周期中发现了一个非常奇怪的行为.

经过几次测试Fragment,我意识到每次都得到这个执行顺序:

  1. onCreateView()
  2. 在onStart()
  3. onCreateOptionsMenu()

我真的很惊讶因为我确信onStart只会在执行后才会被调用onCreateOptionsMenu.

仅供参考,我试图将其设置MenuItem为全局类变量onCreateOptionsMenu以便能够使用它onStart.当然,由于上面解释的执行顺序,我得到了一个空指针.

看来我越挖成片段的生命周期,更多的我失去了和文档仅详细说明的主要方法,从来没有的,如onCreateOptionsMenu,onPrepareOptionsMenu,onCreateContextMenu等.

有人有关于此的任何其他信息,文档并没有真正帮助...

谢谢

android android-lifecycle android-fragments

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

"表面已被释放"错误

我正在为在线视频创建一个媒体播放器,但是当我尝试运行它时,我收到了这个错误:"表面已被释放".这是我的代码:

public class VideoSample1 extends Activity implements  Callback, 
    OnPreparedListener, OnCompletionListener, 
    OnClickListener, OnSeekCompleteListener, android.view.SurfaceHolder.Callback
    {
        public String video_path = "My video URL";
        private SurfaceView surfaceViewFrame;
        private MediaPlayer player;
        private SurfaceHolder holder;
        private Bundle extras;
        private static final String TAG = "log_tag";
        private boolean b =false;

        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.customvideoview);
            extras = getIntent().getExtras();

            surfaceViewFrame = (SurfaceView) findViewById(R.id.surfaceViewFrame);
            surfaceViewFrame.setOnClickListener(this);
            surfaceViewFrame.setClickable(false);

            holder = surfaceViewFrame.getHolder();
            holder.addCallback(this);
            holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

            player = new MediaPlayer();
            player.setOnPreparedListener(this);
            player.setOnCompletionListener(this);

            player.setOnSeekCompleteListener(this);
            player.setScreenOnWhilePlaying(true);
            player.setDisplay(holder);
        }
        @Override
        protected void onDestroy() …
Run Code Online (Sandbox Code Playgroud)

android surfaceview media-player android-videoview

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

Admob interstial loadAd功能太慢

我最近使用Admob添加了一个插页式广告,其中包含Google Play服务库(这仍然是一个非常错误的BTW).

插页式广告运作良好,但以下电话:

// Begin loading interstitial
interstitial.loadAd(adInterstitialRequest);
Run Code Online (Sandbox Code Playgroud)

非常慢,它可以在我的应用程序首次启动时延迟最多2秒.

我该怎么做才能避免这种情况?我严格遵循谷歌提供的例子在这里.

仅供参考我尝试使用a在后台加载广告,AsyncTask但似乎无法做到:

03-23 15:50:21.939: E/AndroidRuntime(3572): Caused by: java.lang.IllegalStateException: loadAd must be called on the main UI thread.
Run Code Online (Sandbox Code Playgroud)

谢谢

android admob google-play-services

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

handleOnGetSentenceSuggestionsMultiple(SpellCheckerSession)中的NullPointerException

我在ACRA报告中多次报告了以下异常.它似乎只来自运行Android 4.4.2的设备,但我不知道问题出在哪里.

有没有人遇到过这个问题?

谢谢

java.lang.NullPointerException
at android.view.textservice.SpellCheckerSession.handleOnGetSentenceSuggestionsMultiple(SpellCheckerSession.java:222)
at android.view.textservice.SpellCheckerSession.access$100(SpellCheckerSession.java:86)
at android.view.textservice.SpellCheckerSession$1.handleMessage(SpellCheckerSession.java:116)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:149)
at android.app.ActivityThread.main(ActivityThread.java:5061)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:603)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

UPDATE

正在运行此主题:https://code.google.com/p/android/issues/detail?id = 161400

线程上的开发人员只在运行Android 4.4.2的设备上遇到完全相同的问题.它似乎在其他版本上得到修复.

android nullpointerexception

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