小编Che*_*eng的帖子

什么应该是默认的启动器图标大小

我参考http://developer.android.com/guide/practices/ui_guidelines/icon_design.html#icon-sets上的文档

因此,我计划拥有以下目录结构.

res/
    drawable/   
        icon.png (? x ? px)
    drawable-ldpi/  
        icon.png (36x36 px)
    drawable-mdpi/  
        icon.png (48x48 px)
    drawable-hdpi/  
        icon.png (72x72 px)
Run Code Online (Sandbox Code Playgroud)

但是,我找不到任何文档,提到默认启动器图标大小的大小.

我可以知道默认的启动器图标大小应该是多少?

android

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

为什么ClassLoader创建的对象没有机会自行收集垃圾

我指的是这个代码示例,该示例在http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6254531中报告

import java.net.URL;

class Loader {
    public static void main(String[] args) throws Exception {
        for (;;) {
            System.gc();
            System.out.print(".");
            System.out.flush();
            new java.net.URLClassLoader(
                new URL[] { new java.io.File(".").toURL() },
                ClassLoader.getSystemClassLoader().getParent()
            ).loadClass("Weakling").newInstance();
        }
    }
}
public class Weakling {
    private static ThreadLocal<Object> local;
    private static Weakling staticRef;
    private Object var = new byte[1000*1000];
    public Weakling() {
        local = new ThreadLocal<Object>();
        local.set(this);
        staticRef = this;
    }

    @Override
    protected void finalize() {
        System.out.print("F");
        System.out.flush();
    }
}
Run Code Online (Sandbox Code Playgroud)

永远不会调用finalize.但是,如果我改变了

            new java.net.URLClassLoader(
                new URL[] { …
Run Code Online (Sandbox Code Playgroud)

java

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

强制JTable在仍处于编辑模式时将数据"提交"到模型

我有一个JTable如下.

替代文字

因此,当JTable仍处于编辑模式时(在Dividend列上有一个键盘光标闪烁),直接单击OK将不会将数据提交到表模型中.单击"确定"仅关闭对话框.

我需要显式按ENTER键,以便将数据提交到表模型中.

虽然JTable仍然处于编辑模式,但在关闭对话框之前,有什么方法可以告诉JTable说:"嘿,是时候将更改提交到模型中"

此对话框的源代码如下对话框源代码.jButton1ActionPerformed按下确定时,请查看执行的代码.

java

13
推荐指数
3
解决办法
4781
查看次数

对java.util.Collection.contains的可疑调用

我从NetBeans IDE收到以下警告.

Suspicious call to java.util.Collection.contains
Expected type T, actual type Object
Run Code Online (Sandbox Code Playgroud)

我知道这意味着什么吗?

这对我来说没有意义.Both ListCollectionclass的contains方法都使用Object作为它们的方法参数.

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

/**
 *
 * @author yan-cheng.cheok
 */
public abstract class AbstractCollection<T> implements Collection<T> {

    protected List<T> list = new ArrayList<T>();

    public boolean contains(Object o) {
        // Suspicious call to java.util.Collection.contains
        // Expected type T, actual type Object
        return list.contains(o);
    }
Run Code Online (Sandbox Code Playgroud)

Collection类的代码片段

/**
 * Returns <tt>true</tt> if this collection contains the specified element.
 * …
Run Code Online (Sandbox Code Playgroud)

java

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

如何使用报告按钮获取崩溃对话框

我故意让自己的应用程序崩溃.我得到以下对话框.

在此输入图像描述

但是,我希望通过报告按钮获得以下崩溃对话框.

在此输入图像描述

我可以知道怎么做吗?我签了申请.(但我将APK本地转移到我的手机,而不是通过Android市场).我仍然无法得到Report按钮.

android

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

通过Messenger将Parcelable传递给远程服务时解组时找不到类

我有一个Parcelable对象,我用它将它从Activity传递给远程服务.当我使用AIDL界面传递它时,一切听起来都很好.

最近,我尝试通过Activity 传递Messenger.

// TEST TEST TEST!
StockInfo stockInfo0 = new StockInfo(Code.newInstance("code0"), Symbol.newInstance("symbol0"));
StockInfo stockInfo1 = new StockInfo(Code.newInstance("code1"), Symbol.newInstance("symbol1"));
StockInfo stockInfo2 = new StockInfo(Code.newInstance("code2"), Symbol.newInstance("symbol2"));
List<StockInfo> stockInfos = new ArrayList<StockInfo>();
stockInfos.add(stockInfo0);
stockInfos.add(stockInfo1);
stockInfos.add(stockInfo2);
StockInfosEx stockInfosEx = new StockInfosEx(stockInfos, "abc");
msg.obj = stockInfosEx;

try {
    mService.send(msg);
} catch (RemoteException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

我在远程服务中遇到以下异常.

02-21 22:55:16.546:E/Parcel(8365):解组时找不到类:com.example.testonmessenger.StockInfosEx,e:java.lang.ClassNotFoundException:com.example.testonmessenger.StockInfosEx

我在想,两者之间有什么问题?这是我的Parcelable对象.

public class StockInfosEx implements Parcelable {
    public final List<StockInfo> stockInfos;
    public final String searchedString;

    public …
Run Code Online (Sandbox Code Playgroud)

android

13
推荐指数
2
解决办法
2万
查看次数

调用notifyDataSetChanged时,在RecylerView项中应用stateListAnimator会导致闪烁效果

我意识到,如果我申请android:stateListAnimatorRecylerView的项目,通话adapter.notifyDataSetChanged会造成一些意想不到的闪烁效果RecylerView的项目(并非所有项目,奇怪)

这是我的RecylerView项目

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    android:stateListAnimator="@anim/lift_up"
    android:background="@drawable/white" >

    ...
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

@anim/lift_up 被定义为

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_enabled="true"
        android:state_pressed="true">
        <objectAnimator
            android:duration="@android:integer/config_shortAnimTime"
            android:propertyName="translationZ"
            android:valueTo="8dip"
            android:valueType="floatType" />
    </item>
    <item>
        <objectAnimator
            android:duration="@android:integer/config_shortAnimTime"
            android:propertyName="translationZ"
            android:valueTo="4dip"
            android:valueType="floatType" />
    </item>
</selector>
Run Code Online (Sandbox Code Playgroud)

并被@drawable/white定义为

<drawable name="white">#ffffffff</drawable>
Run Code Online (Sandbox Code Playgroud)

当我打电话时adapter.notifyDataSetChanged,RecylerView的最后5个项目发生以下奇怪的闪烁效果.(屏幕上共有10个可见项目)

https://youtu.be/yB4UP2wEFk0

此问题仅发生在API 21及更高版本,因为只有API 21支持 android:stateListAnimator

这是一个错误,还是我错过了一些东西?

完整的最小可行代码可以从https://github.com/yccheok/RecyclerViewTutorial/tree/4763879598864233a8e6544fe240c3fb34a15b73下载

android

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

实现工具栏菜单项单击涟漪效果

我尝试用来padding增加按钮的触摸区域.我用

<ImageButton
    android:paddingRight="32dp"
    android:paddingEnd="32dp"
    android:id="@+id/confirm_image_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:background="?selectableItemBackgroundBorderless"
    android:src="?attr/confirmIcon" />
Run Code Online (Sandbox Code Playgroud)

点击区域是放大的.但是,selectableItemBackgroundBorderless点击效果不再显示为完美的圆圈.

在此输入图像描述


我尝试用duplicateParentState技术来克服.

<FrameLayout
    android:clickable="true"
    android:paddingRight="32dp"
    android:paddingEnd="32dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true">
    <ImageButton
        android:duplicateParentState="true"
        android:id="@+id/confirm_image_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="?selectableItemBackgroundBorderless"
        android:src="?attr/confirmIcon" />
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在,

  1. 点击区域被放大.
  2. selectableItemBackgroundBorderless圆的效果是一个完美的圆.

但是,它似乎有一些奇怪的行为.单击实际区域时ImageButton,不显示圆按效果.

在此输入图像描述

我可以知道为什么会这样,我怎么能克服它?我使用API​​ 26进行了测试.

注意,我试图避免使用TouchDelegate技术,除非我被迫,因为它使我们的代码更复杂.


附加信息

以下是按钮显示的正确行为Toolbar.

当点击区域位于按钮外时,会显示波纹效果

在此输入图像描述

当点击区域在按钮内时,会显示波纹效果

在此输入图像描述

但是,我不知道他们是如何实现这种行为的.

android android-layout android-view android-drawable rippledrawable

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

WorkManager的OneTimeWorkRequest的重试策略/机制是什么

我有以下一次性工作人员.

// Create a Constraints that defines when the task should run
Constraints constraints = new Constraints.Builder()
        .setRequiredNetworkType(NetworkType.UNMETERED)
        .setRequiresBatteryNotLow(true)
        // Many other constraints are available, see the
        // Constraints.Builder reference
        .build();

OneTimeWorkRequest oneTimeWorkRequest =
        new OneTimeWorkRequest.Builder(SyncWorker.class)
                .setConstraints(constraints)
                .addTag(SyncWorker.TAG)
                .build();
Run Code Online (Sandbox Code Playgroud)

根据https://developer.android.com/topic/libraries/architecture/workmanager

// (Returning RETRY tells WorkManager to try this task again
// later; FAILURE says not to try again.)
Run Code Online (Sandbox Code Playgroud)

我想知道,如果SyncWorker继续回来RETRY,重试策略是WorkManager什么?例如,最大重试次数是WorkManager多少?文档不清楚.

android android-architecture-components android-workmanager

13
推荐指数
2
解决办法
5803
查看次数

我们应该先调用 MobileAds.setRequestConfiguration 还是 MobileAds.initialize?

这方面的文档不多。我在想,我们应该先打电话

RequestConfiguration conf= new RequestConfiguration.Builder()
        .setMaxAdContentRating(
                MAX_AD_CONTENT_RATING_T)
        .build();

MobileAds.setRequestConfiguration(conf);
MobileAds.initialize(context, APP_ID);
Run Code Online (Sandbox Code Playgroud)

或者

MobileAds.initialize(context, APP_ID);
RequestConfiguration conf= new RequestConfiguration.Builder()
        .setMaxAdContentRating(
                MAX_AD_CONTENT_RATING_T)
        .build();

MobileAds.setRequestConfiguration(conf);
Run Code Online (Sandbox Code Playgroud)

https://developers.google.com/admob/android/quick-start

虽然谷歌建议MobileAds.initialize尽早打电话

在加载广告之前,让您的应用通过调用 MobileAds.initialize() 来初始化移动广告 SDK,这会初始化 SDK 并在初始化完成后(或在 30 秒超时后)回调完成侦听器。这只需执行一次,最好是在应用程序启动时执行。

他们还提到需要在MobileAds.initialize.

警告:在调用 MobileAds.initialize() 时,移动广告 SDK 或中介合作伙伴 SDK 可能会预加载广告。如果您需要获得欧洲经济区 (EEA) 用户的同意、设置任何特定于请求的标志(例如 tagForChildDirectedTreatment 或 tag_for_under_age_of_consent),或者在加载广告之前采取其他措施,请确保在初始化移动广告 SDK 之前这样做。

所以,不是很清楚应该先调用哪个。

android admob

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