小编Nic*_*las的帖子

Lineargradient从指定的位置偏移绘制

我用这个代码用一个Lineargradient做了一个色调渐变:(我知道它本来可以变得更简单Color.parseColor但是我必须这样做.我也不能使用drawable.)

colors = new int[]{ Color.HSVToColor(new float[]{0, 1, 1}),
                    Color.HSVToColor(new float[]{60, 1, 1}), 
                    Color.HSVToColor(new float[]{120, 1, 1}), 
                    Color.HSVToColor(new float[]{180, 1, 1}),
                    Color.HSVToColor(new float[]{240, 1, 1}), 
                    Color.HSVToColor(new float[]{300, 1, 1}), 
                    Color.HSVToColor(new float[]{360, 1, 1}) };
Shader shader = new LinearGradient(0, 0, width, 0, colors, null, Shader.TileMode.CLAMP);
paint.setShader(shader);
Run Code Online (Sandbox Code Playgroud)

产生这种结果的颜色略有偏移,绿色区域太小,蓝色区域与预期结果相比太大.

对照

我查了一切.我尝试使用new float[]{0f, 1/6f, 2/6f, 3/6f, 4/6f, 5/6f, 1f}而不是null位置参数,相同的结果.这可能也是一个错误.

请注意,这不是重复这个帖子也不是这一个.这些是关于在代码中设置的不正确的渐变停止,这不是我的情况.它可能与这个有关,但我不知道如何.

编辑:也许这可以通过设置不相等的位置来解决,但我怎样才能计算出这些确切的位置?

android linear-gradients hsv

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

在画象和两个窗格的Viewpager在风景

我正在尝试实现一种布局,当设备显示在纵向上时显示视图寻呼机,并在设备处于横向时显示两个窗格.

所以我制作了两个不同的布局文件,一个只有一个ViewPager,另一个有一个LinearLayout,另一个有两个FrameLayout,我不认为有必要在这里显示它们.hasTwoPanes两种配置也有一个布尔值.

@Inject FragmentOne fragmentOne;
@Inject FragmentTwo fragmentTwo;

@Override
protected void onCreate(Bundle state) {
    super.onCreate(state);
    setContentView(R.layout.activity_main);

    FragmentManager fm = getSupportFragmentManager();
    boolean hasTwoPanes = getResources().getBoolean(R.bool.hasTwoPanes);

    TabLayout tabLayout = findViewById(R.id.tab_layout);
    ViewPager viewPager = findViewById(R.id.view_pager);
    if (hasTwoPanes) {
        tabLayout.setVisibility(View.GONE);
    } else {
        tabLayout.setVisibility(View.VISIBLE);
        tabLayout.setupWithViewPager(viewPager);
        viewPager.setAdapter(new MyPagerAdapter(fm));
    }

    FragmentOne frag1 = (FragmentOne) fm.findFragmentByTag(getFragmentName(0));
    if (frag1 != null) fragmentOne = frag1;

    FragmentTwo frag2 = (FragmentTwo) fm.findFragmentByTag(getFragmentName(1));
    if (frag2 != null) fragmentTwo = frag2;

    if (hasTwoPanes) {
        if (frag1 != null) {
            fm.beginTransaction().remove(fragmentOne).commit();
            fm.beginTransaction().remove(fragmentTwo).commit(); …
Run Code Online (Sandbox Code Playgroud)

android android-configchanges android-fragments android-viewpager

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

在应用XML属性之前恢复视图状态

我有一个自定义视图,让我们说这是它的代码:

public class CustomView extends View {

    boolean visible;
    boolean enabled;

    public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);

        TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomView, 0, 0);
        try {
            visible = a.getBoolean(R.styleable.CustomView_visible, true);
            enabled = a.getBoolean(R.styleable.CustomView_enabled, true);
        } finally {
            a.recycle();
        }

        // Apply XML attributes here
    }

    @Override
    public Parcelable onSaveInstanceState() {
        // Save instance state
        Bundle bundle = new Bundle();
        bundle.putParcelable("superState", super.onSaveInstanceState());
        bundle.putBoolean("visible", visible);
        bundle.putBoolean("enabled", enabled);

        return bundle;
    }

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

android android-custom-view android-xml android-savedstate

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

检查本地 lateinit 变量是否已初始化

成员 lateinit 变量初始化可以通过以下方式检查:

class MyClass {
    lateinit var foo: Any
    ...
    fun doSomething() {
        if (::foo.isInitialized) {
           // Use foo
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,此语法不适用于本地 lateinit 变量。Lint 报告错误:“尚不支持对变量的引用”。从逻辑上讲,应该有一种方法可以做到这一点,因为 lateinit 变量在未初始化时在内部为 null。

有没有办法检查局部变量是否已初始化?

kotlin kotlin-lateinit

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

progressDialog动画在大型setText()上暂停

我正在尝试在EditText中设置一个大文本,操作可能需要30秒以上,所以我使用ProgressDialog.它显示,但没有动画,然后在操作完成后消失.这是我的简化代码:

class FileOpener extends AsyncTask<File, Integer, String> {

    private ProgressDialog progress;

    @Override
    protected void onPreExecute() {
        progress = new ProgressDialog(context);
        ...
        progress.show();
    }

    @Override
    protected StringBuilder doInBackground(File... files) {
        return readFile();
    }


    @Override
    protected void onPostExecute(String content) {
        EditText editText = ...
        editText.post(new Runnable() {
            @Override
            public void run() {
                editText.setText(content);
                progress.dismiss();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

在设置文本时,如何设置进度对话框的动画?

我也尝试过使用它onPostExecute,同样的东西,对话框就在那里,但没有动画......

EditText editText = ...
new Thread() {
    @Override
    public void run() {
        editor.setText(content);
        progress.dismiss();
    }
}.start();
Run Code Online (Sandbox Code Playgroud)

编辑 - 这不是我的EditText速度的问题,这是我理解的可怕.这个问题就在这里 …

multithreading android android-edittext

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

即使明确设置了库的样式属性也没有值

目前的答案没有帮助,这个问题没有答案

我创建了一个带有自定义视图的库,可以在创建时扩展布局.布局中的视图使用style="?attr/labelStyle"任何其他属性设置样式.

该属性被声明为库的attrs.xml:

<attr name="myViewStyle" format="reference"/>

<declare-styleable name="MyView">
    <attr name="labelStyle" format="reference|color"/>
</declare-styleable>
Run Code Online (Sandbox Code Playgroud)

我在库中为此属性设置了一个默认值styles.xml:

<style name="MyViewStyle">
    <item name="labelStyle">@style/LabelStyle</item>
</style>

<style name="LabelStyle">
    <item name="android:textColor">?android:attr/textColorPrimary</item>
    <item name="...">...</item>
</style>
Run Code Online (Sandbox Code Playgroud)

最后在图书馆themes.xml:

<style name="MyViewStyleLight" parent="Theme.AppCompat.Light">
    <item name="myViewStyle">@style/MyViewStyle</item>
</style>
Run Code Online (Sandbox Code Playgroud)

现在这是库的默认样式,但它在主项目中被覆盖 styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="myViewStyle">@style/MyViewStyleCustom</item>
</style>

<style name="MyViewStyleCustom" parent="MyViewStyleLight">
    <item name="android:textColor">@color/gray</item>
    <item name="...">...</item>
</style>
Run Code Online (Sandbox Code Playgroud)

自定义视图代码:

public MyView(Context context) {
    this(context, null, R.attr.myViewStyle, 0);
}

public MyView(Context context, @Nullable AttributeSet attrs) {
    this(context, attrs, R.attr.myViewStyle, 0);
}

public MyView(Context …
Run Code Online (Sandbox Code Playgroud)

android android-library android-fragments android-styles

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

无法使用IntelliJ应用程序配置找到或加载主类

我在IntelliJ IDEA 2019.1.3中使用Gradle创建了一个项目,其主类如下所示:

public final class Main {
    public static void main(String[] args) {
        // Do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

但是每次我尝试启动程序时,它总是显示相同的错误:

Error: Could not find or load main class com.example.Main
Caused by : java.lang.ClassNotFoundException: com.example.Main
Run Code Online (Sandbox Code Playgroud)

我正在使用应用程序配置模板。我尝试了以下方法:

  • 清理/重建项目
  • 无效的缓存/重启
  • 重新导入Gradle项目
  • 删除.idea文件夹
  • 删除并重新创建配置文件
  • 从头开始创建项目
  • 完全重新安装IntelliJ
  • 从JDK 8更新到JDK 11
  • 我的源集是正确的,构建文件夹,类路径模块,文件包都已正确设置。构建任务在启动之前运行。实际上,Main.classbuild/文件夹下和生成的jar文件中实际上都有一个文件。

我知道的唯一解决方案是使用gradle任务运行:

task run(type: JavaExec) {
    main = "com.example.MainKt"
    classpath = sourceSets.main.get().runtimeClasspath
    standardInput = System.in
    isIgnoreExitValue = true
}
Run Code Online (Sandbox Code Playgroud)

但是我宁愿不这样做,因为控制台将不接受输入,由于某种原因不支持unicode,而且我无法像IntelliJ的配置窗口一样容易地传递程序参数。

有谁遇到过这个问题,如何解决?自从我更新到IntelliJ 2019.1以来,这只是我自己发生的事情,它在2018.3.6的大部分时间里都运行良好。

编辑:摇篮设置 在此处输入图片说明

编辑2:最初的问题是关于Kotlin,但我意识到我与Java遇到相同的错误。

java jvm intellij-idea kotlin

7
推荐指数
2
解决办法
953
查看次数

检查特定区域设置中是否存在资源

我正在做一个具有搜索功能的项目,但只有在搜索的标签被翻译成设备语言时才启用。有什么方法可以检查特定区域设置中是否存在资源?我想避免对哪些翻译可用进行硬编码。

android android-resources

6
推荐指数
0
解决办法
979
查看次数

将微调器宽度设置为当前项宽度

默认情况下,微调器宽度设置为适合下拉列表中的最大项目,但我希望它与所选项目的宽度相同.

<android.widget.Spinner
    android:id="@+id/tab_spinner"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:entries="@array/countries" />
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

正如您在右侧图像中看到的那样,由于列表中的长项目,微调器太长了.

如何将其调整为所选项目宽度?

android selection width spinner

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

无法以任何方式在工具栏顶部显示 actionMode

目前,操作模式工具栏显示在工具栏上方,将整个布局向下移动,我希望它显示在当前工具栏的顶部。我在这篇文章这篇文章中尝试了所有解决方案:

  • 我尝试使用windowActionModeOverlay和不使用android:前缀,没有成功
  • 我都尝试view.ActionModesupport.v7.view.ActionMode,没有成功
  • 我尝试在我的工具栏和我的活动中使用 startActionMode,但都没有奏效。
  • setContentView之前被调用super.onCreate,这不是问题

现在我只是手动设置工具栏可见性,这看起来很糟糕。另外我之前设置了活动主题super.onCreate,这可能是问题吗?如果不是,那是什么?我怎样才能使属性起作用?

我的活动:

import android.support.v7.view.ActionMode;
import android.support.v7.widget.Toolbar;
// import ...

public class FileExplorerActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.Theme_NoActionBar);
        super.onCreate(savedInstanceState);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        // ...
    }

    private void setActionMode(boolean enabled) {
        if (enabled) {
            actionMode = startSupportActionMode(new ActionMode.Callback() {
                @Override
                public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                    MenuInflater inflater = …
Run Code Online (Sandbox Code Playgroud)

android android-actionbar android-actionmode

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