小编azi*_*ian的帖子

RecyclerView中的setRecycledViewPool方法

我试图理解setRecycledViewPool方法实际上与下面的代码行中的RecyclerView一起做什么,其中mrecyclerView是RecyclerView对象:

mrecyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool());
Run Code Online (Sandbox Code Playgroud)

我阅读了Android文档链接,但我仍然不明白它的作用.有人可以向我解释它的用途以及何时使用它?

java android android-layout android-view android-recyclerview

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

gradle插件升级后无法解析DefaultManifestParser

我正在尝试在Android Studio中编译AndroidCaldavSyncAdapter项目.它甚至工作过,但升级后的Gradle插件版本,从com.android.tools.build:gradle:1.5.0com.android.tools.build:gradle:2.3.0其停止工作.现在我收到这个错误:

  Error:(34, 0) A problem occurred evaluating project ':ACalDAV'.
Run Code Online (Sandbox Code Playgroud)

cannot resolve symbol 'builder'

import com.android.builder.core.DefaultManifestParser
Run Code Online (Sandbox Code Playgroud)

这是build.grade文件:

import com.android.builder.core.DefaultManifestParser

apply plugin: 'com.android.application'
apply from: '../config/quality/quality.gradle'

android {
    compileSdkVersion 22
    buildToolsVersion '25.0.3'

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

    }

    defaultConfig {
        applicationId "de.we.acaldav"
        minSdkVersion 14 …
Run Code Online (Sandbox Code Playgroud)

android build gradle android-build android-gradle-plugin

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

图标和NavigationView之间的左边距

我必须在图标和NavigationView图像中的箭头之间添加左边距:

在此输入图像描述

我知道根据谷歌的规格,这个保证金必须有,16dp但我需要改变它.我试过了:

 <dimen tools:override="true" name="design_navigation_icon_padding">64dp</dimen>
 <dimen tools:override="true" name="design_navigation_separator_vertical_padding">20dp</dimen>
Run Code Online (Sandbox Code Playgroud)

但仍然没有工作.有任何想法吗?

java android android-layout android-view navigationview

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

将字母间距设置为drawTextOnPath

我正在使用以下代码来制作旋转轮。

@Override
    public void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);

        for (int i = 0; i < segmentColors.length; i ++)
        {
            drawDataSet(canvas, i);
        }

        canvas.drawCircle(getWidth()/2, getHeight()/2, getWidth() - getWidth()/2 - dpToPx(5), mTransparentCirclePaint);
    }


protected void drawDataSet(Canvas canvas, int position)
    {
        int color = segmentColors[position];
        float mainArcAngle = ((float) 360/ (float)segmentColors.length);

        Paint paint = new Paint();
        paint.setStyle(Paint.Style.FILL);

        if ( position%2 == 0)
            paint.setColor(color);
        else
            paint.setColor(Color.parseColor("#009f2f"));

        RectF rect = new RectF(0, 0, getWidth(), getWidth());
        canvas.drawArc(rect, (mainArcAngle * position), mainArcAngle, true, paint);

        TextPaint mTextPaint = …
Run Code Online (Sandbox Code Playgroud)

android android-custom-view android-canvas android-paint

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

无法将自定义 getter 与委托属性一起使用

我是 kotlin 新手,无法弄清楚这个问题。

我有一个不可为 null 的属性,可能会也可能不会使用。因此,我以一种惰性的方式委托它,以便在需要时对其进行初始化。

private val labelAnimator: ObjectAnimator by lazy {
    ObjectAnimator.ofFloat(this, "floatingLabelFraction", 0f, 1f)
}
Run Code Online (Sandbox Code Playgroud)

但是,我还需要在每次访问该对象时设置该对象的一些属性。

fun getLabelAnimator(): ObjectAnimator {
    labelAnimator.duration = (if (isFloatingLabelAnimating) 300 else 0).toLong()
    return labelAnimator
}
Run Code Online (Sandbox Code Playgroud)

但我无法使用自定义 getter,因为该属性是委托的。我如何以最好的方式实现这一目标?

getter properties kotlin delegated-properties

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

动画布局的背景颜色变化

我有一个RelativeLayout我已经设置了背景的drawable. 我能够RelativeLayoutRadioButton检查时将背景更改为另一个背景。但是当它改变时我如何给它一个动画?

代码:activity_main.xml:

<RelativeLayout
    android:layout_width="80dp"
    android:layout_height="50dp"
    android:gravity="center"
    android:background="@drawable/original"
    android:id="@+id/rel1">
    <RadioButton
        android:id="@+id/radio"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

原始.xml(可绘制):

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid
        android:color="#ffffff">
    </solid>
    <corners
        android:radius="50dp">
    </corners>
</shape>
Run Code Online (Sandbox Code Playgroud)

按下.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid
        android:color="#2196F3">
    </solid>
    <corners
        android:radius="50dp">
    </corners>
</shape>
Run Code Online (Sandbox Code Playgroud)

Java类:

radio.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                    if(b){
                    relativeLayout.setBackgroundResource(R.drawable.pressed);
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

animation android android-animation android-layout android-view

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

subscribeOn Android UI线程

我是RxJava的新手,我想我可能会忽略一些非常基本的东西.所以我创建了Observable一个像这样执行长时间运行的I/O任务.现在我想确保订阅者在Android UI线程上收到其结果:

Observable.create(new ObservableOnSubscribe<Device>() {
    @Override
    public void subscribe(@io.reactivex.annotations.NonNull final ObservableEmitter<Device> e) throws Exception {
        //Long running task
    }
}).subscribeOn(Schedulers.io())
Run Code Online (Sandbox Code Playgroud)

如您所见,我已执行了长时间运行的任务Schedulers.io().如何切换回Android UI线程?

android reactive-programming rx-java rx-android rx-java2

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

onError 在 RxJava2 中未实现错误,即使它已实现

所以我有一个非常基本的 RxJava 观察者流工作流程,我从改造中请求一些东西,如果响应成功,我会烘烤成功的消息,如果出现错误,我会烘烤错误消息。

我下面提到的情况是错误情况,我期望来自 API 的错误消息,我将其转换为用户可读的单词并显示为Toast,如下所示,当我使用doOnNext这种doOnError方式时,它会因提到的错误而崩溃。

throwExceptionIfFailure还添加了方法,它显示了如何转换可读消息以及控制台指向错误的行。

registerNFCTag(body)
                .map(result -> throwExceptionIfFailure(result))
                .observeOn(AndroidSchedulers.mainThread())
                .doOnNext(result -> {
                  toggleLoaders(true);                        
                 appToast(getString(R.string.done_msg) + tagName);
                })
                .doOnError(throwable -> {
                    Toasty.error(this, throwable.getLocalizedMessage()).show();
                    toggleLoaders(true);
                })
                .subscribeOn(Schedulers.io())
                .subscribe();
Run Code Online (Sandbox Code Playgroud)

错误如果这还不够,我也可以发布堆栈跟踪。

java.lang.IllegalStateException: Exception thrown on Scheduler.Worker thread. Add `onError` handling.
Run Code Online (Sandbox Code Playgroud)

ThrowExceptionIfFailure 方法。

public <T> T throwExceptionIfFailure(T res) {

    Response result = (Response<?>) res;
    if (!result.isSuccessful()) {
        try {
            String msg = result.errorBody().string();
            Log.d(TAG, "throwExceptionIfFailure: "+msg);
            if (result.code() == 401 || result.code() == 403) …
Run Code Online (Sandbox Code Playgroud)

java error-handling android rx-android rx-java2

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

DrawerLayout onDrawerClosed() 调用两次

我将菜单抽屉用作清单,并且 onDrawerClosed 根据 int 值将向用户收费或不保存更改。但是 onDrawerClosed 方法调用了两次,一次使用 int 和正确的值,一次使用 int 和值 0?这导致我的程序同时调用 if 和 else 语句,以便保存更改并提示他们付款。

//Used so that when drawer closed banned list saves
public void drawerListener(){
    mDrawer.addDrawerListener(new DrawerLayout.DrawerListener() {
        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
        }

        @Override
        public void onDrawerOpened(View drawerView) {
            customAdaptor.clearJustChanged();
        }

        @Override
        public void onDrawerClosed(View drawerView) {
            System.out.println("Cost of Changes:" + customAdaptor.getUserCostOfChange());
            if (customAdaptor.getUserCostOfChange() > 0) {
                getBuyAlert(customAdaptor.getUserCostOfChange());
                customAdaptor.setUserCostOfChange(0);
            }
            else {
                bannedList = customAdaptor.getBannedList();
                databaseReference.child("BannedApps").setValue(bannedList);
            }
        }

        @Override
        public void onDrawerStateChanged(int newState) …
Run Code Online (Sandbox Code Playgroud)

java android listener android-view drawerlayout

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

将动画按顺序应用于多个视图

buttonViews在垂直线性布局中有 3 个视图 ( )的活动。我正在动态生成(膨胀)这些视图。我想应用一个动画,以便在活动开始时,第一个按钮滑入 -> 100 毫秒延迟 -> 第二个按钮滑入 -> 100 毫秒延迟 -> 第三个按钮滑入。

试图

我尝试以这种方式实现它:

private void setMainButtons() {
    ArrayList<String> dashboardTitles = DashboardUtils.getDashboardTitles();
    ArrayList<Integer> dashboardIcons = DashboardUtils.getDashboardIcons();

    final ViewGroup root = findViewById(R.id.button_container);

    for (int i = 0; i < (dashboardTitles.size() < dashboardIcons.size() ? dashboardTitles.size() : dashboardIcons.size()); i++){
        final View buttonView = DashboardButtonInflater.getDashboardButton(root, dashboardTitles.get(i), dashboardIcons.get(i), this);
        if (buttonView == null) continue;
        buttonView.setOnClickListener(this);
        root.addView(buttonView);
        animateBottomToTop(buttonView, (long) (i*50)); // Calling method to animate buttonView
    }
}

//The function that …
Run Code Online (Sandbox Code Playgroud)

animation android android-animation android-layout android-view

3
推荐指数
2
解决办法
3033
查看次数