小编j2e*_*nue的帖子

Android-ImageSpan-如何居中对齐文本末尾的图像

我在xml布局中具有以下内容:

在此处输入图片说明

注意六角形#4如何不在文本的中心对齐。我该怎么做:这是到目前为止我尝试过的事情:

为了真正获得其中带有#的视图,我给视图添加一个如下所示的视图:

//my_hexagon_button.xml:

     <?xml version="1.0" encoding="utf-8"?>
       <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                     xmlns:tools="http://schemas.android.com/tools"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:orientation="vertical"
                     android:padding="0dp"
                     tools:ignore="MissingPrefix">


           <Button
               android:id="@+id/tv_icon"
               fontPath="proxima_nova_semi_bold.otf"
               android:layout_width="16dp"
               android:layout_height="17.5dp"
               android:layout_marginBottom="5dp"
               android:layout_marginLeft="10dp"
               android:alpha=".25"
               android:background="@drawable/hexagon"
               android:clickable="true"
               android:contentDescription="@string/content_description"
               android:focusable="false"
               android:padding="0dp"
               android:text="4"
               android:textColor="@color/white"
               android:textSize="8dp"
               />

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

扩大视图后,我获取其图形缓存的副本,并在ImageSpan中使用它。这是我如何获取图形缓存的副本:

public Bitmap getIconBitmap() {
               LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
               LinearLayout myRoot = new LinearLayout(getActivity());

               // inflate and measure the button then grab its image from the view cache
               ViewGroup parent = (ViewGroup) inflater.inflate(R.layout.my_hexagon_button, myRoot);
               TextView tv = (TextView) parent.findViewById(R.id.tv_icon);

               parent.setDrawingCacheEnabled(true);
               parent.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                       View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
               parent.layout(0, 0, …
Run Code Online (Sandbox Code Playgroud)

android spannablestring

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

Android - 带有自定义视图选项卡的 tablayout - 无法应用可绘制选择器

我正在尝试使用 gradle 中的 compile 'com.android.support:design:25.3.1' 在 tablayout 中设置自定义选项卡。

我想使用选择器,以便在单击选项卡时它会根据其状态进行更改。

所以我尝试了以下失败:

这是我的活动 xml:

<ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:background="@color/white"/>

<android.support.design.widget.TabLayout
    android:id="@+id/tabLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabMode="fixed"
    app:tabGravity="fill"
    style="@style/MyCustomTabLayout"
    />
Run Code Online (Sandbox Code Playgroud)

这是我用于 tabLayout 的样式:

<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout">
       <item name="tabIndicatorColor">@android:color/transparent</item>
   </style>
Run Code Online (Sandbox Code Playgroud)

隐藏下划线。

这是我的主页选项卡的选择器之一:

这是我对每个选项卡的自定义视图:

<ImageView
    android:id="@+id/iv_imgview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    tools:src="@drawable/home_tab_selector"

    />

<TextView
    android:id="@+id/tv_tab_name"
    android:layout_gravity="center"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:text="HOME"
    />
Run Code Online (Sandbox Code Playgroud)

这是创建 tablayout 的代码部分:

for (int i = 0; i < NUM_OF_TABS; i++)
           tabLayout.addTab(tabLayout.newTab());

       adapter = new LandingPagerAdapter(getApplicationContext(),getSupportFragmentManager(), tabLayout.getTabCount());

       //Adding adapter to pager
       viewPager.setAdapter(adapter);

       tabLayout.addOnTabSelectedListener(this);
       tabLayout.setupWithViewPager(viewPager);

       // Iterate over …
Run Code Online (Sandbox Code Playgroud)

android android-tablayout

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

过滤特殊字符的正则表达式不起作用

我正在搜索一个正则表达式,我可以用它来检查用户输入是否包含指定列表中的特殊字符。

以下是我尝试编写的正则表达式不允许使用的特殊字符: ^[`~!@#$%^&*()_+={}\[\]|\\:;“’<,>.???]*$

我去了https://regex101.com/,我期待以下输入匹配,但不是为什么:

127 elmer road ??<>()
Run Code Online (Sandbox Code Playgroud)

所以在android java(但可以是任何)中,我编写了以下函数,但它也总是返回 true 。我如何过滤所有这些特殊字符。如果给定的字符串不匹配,我想要一个返回 true 的函数。

  public boolean isValid( EditText et) {
            String string = et.getText().toString();
            boolean isValid = true;

             final Pattern sPattern
                    = Pattern.compile("^[`~!@#$%^&*()_+={}\\[\\]|\\\\:;“’<,>.???]*$");

            isValid=  !sPattern.matcher(string).matches();


            return isValid;
        }
Run Code Online (Sandbox Code Playgroud)

更新:我也尝试了以下操作:

在此处输入图片说明

regex regular-language

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

Kotlin - “in”关键字 - 用于什么?

我试图了解何时在泛型中使用“in”关键字而不是“out”关键字(它允许分配给子类)。

我实际上正在关注本教程如果重要的话,。

假设我们有以下类定义:

class ParameterizedConsumer<in T> {
    fun toString(value: T): String {
        return value.toString()
    }
}
Run Code Online (Sandbox Code Playgroud)

由于不保证 value 是 String ,这甚至如何编译?这是 in 关键字的作用吗?它告诉类可以保证该类型不会是任何其他子类?我只是不清楚它的用例,你能帮忙吗?

教程说我将能够调用以下内容,但我不知道它发生了什么变化:

 val parameterizedConsumer = ParameterizedConsumer<Number>()

val ref: ParameterizedConsumer<Double> = parameterizedConsumer

assertTrue(ref is ParameterizedConsumer<Double>)
Run Code Online (Sandbox Code Playgroud)

更新:我现在明白了。Out 意味着您可以在制作时垂头丧气。“In”意味着你可以在分配时垂头丧气。

所以在java中这是不允许的:

// Java
void demo(Source<String> strs) {
  Source<Object> objects = strs; // !!! Not allowed in Java
  // ...
}
Run Code Online (Sandbox Code Playgroud)

但是在 kotlin 中,如果我们使用“out”关键字,我们可以解决这个问题,我们可以将其分配给向下转换的类(子类)。同样,使用“in”,我们可以将子类传入该类以在内部使用,但不能向外使用。

kotlin

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

无法在Android Studio中加载Custom Gradle插件的类

我正在尝试创建一个自定义插件,可以在gradle.build文件中应用它。有几种方法可以做到这一点,但是我正在使用buildSrc文件夹来实现。这意味着该插件将与我的版本绑定,而不是可移植。从文档开始,buildSrc文件夹应具有以下属性:

buildSrc项目您可以将任务类的源代码放在rootProjectDir / buildSrc / src / main / groovy目录中。Gradle将负责编译和测试任务类,并使其在构建脚本的类路径中可用。任务类对于构建所使用的每个构建脚本都是可见的。但是,它在构建外部不可见,因此您不能在定义该构建的外部重用任务类。使用buildSrc项目方法将任务声明(即任务应执行的操作)与任务实现分开。也就是说,任务是如何完成的。

但是无论如何,我的问题在下面:

我已经在根项目路径中创建了一个buildSrc目录,并创建了一个可被IDE识别的groovy文件夹。

以下是我的折叠结构和我得到的错误:

在此处输入图片说明

现在,这里是任务和插件本身:

RenameAppVersionNameTask.groovy:

    package com.myplugins
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction

class RenameAppVersionNameTask extends DefaultTask {

    @TaskAction
    def run() {
        project.configure(project) {
            // Check if plugin works on an Android module
            if (it.hasProperty("android")) {
                // Iterate over app build variants (build types + flavors)
                project.android.applicationVariants.all { variant ->
                    // Only change debug build type variants
                    if (variant.buildType.name == project.android.buildTypes.debug.name) {
                        // Rename versionName
                        def customVersionName = variant.mergedFlavor.versionName
                        variant.mergedFlavor.versionName …
Run Code Online (Sandbox Code Playgroud)

android gradle android-gradle-plugin

0
推荐指数
1
解决办法
1475
查看次数

java - 如何制作按字母顺序对集合进行排序的泛型函数

我想创建一个实用程序方法,它可以接受一个列表并按其字符串值对其进行排序.但我似乎无法弄清楚如何编写通用的参数.这是我到目前为止:

public class StringUtils {

    public static <T> void sortAscending(List<T> list) {
        Collections.sort(list.getClass(),
                new Comparator<T>() {
            public int compare(T f1, T f2) {
                return f1.toString().compareTo(f2.toString());
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

"Collection.sort"这一行在编译时抱怨我没有传递正确的东西.我怎样才能实现这一目标?

在此输入图像描述

java sorting generics comparator

0
推荐指数
1
解决办法
97
查看次数

Kotlin - 如何将null值传递给片段newInstance方法?

我使用Kotlin创建了一个片段,你知道如何在Java中设置片段args的方便静态方法.像这样:

public static MyFragment newInstance(Bundle args){
    MyFragment fragment = new MyFragment();
    fragment.setArguments(args);
    return fragment;
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用伴侣对象在Kotlin中完成此操作,因为它是静态的.这是我到目前为止编译的内容:

companion object {
    fun newInstance(@Nullable b: Bundle): MyFragment {
        val frag = MyFragment()
        frag.arguments = b
        return frag
    }
}
Run Code Online (Sandbox Code Playgroud)

我在想,如果我使用@Nullable注释,我将被允许传入null for bundle但是当我调用时,我一直收到以下错误MyFragment.newInstance(null):

致命异常:主进程:com.mobile.MyApp.labs,PID:5758 java.lang.IllegalArgumentException:指定为非null的参数为null:方法kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,com.mobile中的参数b.来自com.mobile.MyApp的com.mobile.MyApp.ui.cart.fragments.CartDetailsFragment.onCtaClicked(CartDetailsFragment.java:521)中的MyApp.ui.cart.fragments.MyFragment $ Companion.newInstance(MyFragment.kt:0). ui.cart.fragments.CartDetailsFragment_ViewBinding $ 1.doClick(CartDetailsFragment_ViewBinding.java:66)位于android.view.View.performClick(View.java:6256)的butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22).在Android.os.Loo上的android.os.Handler.dispatchMessage(Handler.java:98)的android.os.Handler.handleCallback(Handler.java:789)上查看$ PerformClick.run(View.java:24701) .loop(Looper.java:164)位于com.andro的java.lang.reflect.Method.invoke(Native Method)的android.app.ActivityThread.main(ActivityThread.java:6541)id.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

我怎么能通过null

android kotlin

0
推荐指数
1
解决办法
1187
查看次数

rxjava - 如何从两个可观测量中获取交替排放

我有两个可观察者,我想从每个观察者中取出,直到两者都没有.有没有运营商这样做?让我向您展示我尝试过的内容以及我想要完成的内容:

  Observable<String> observable = Observable.just("hello","are", "doing");
        Observable<String> observable2 = Observable.just("how","you","today");
Run Code Online (Sandbox Code Playgroud)

我想"减少"这样,以便最终的排放量是" 你好,今天你好吗?

在这里我尝试使用扫描,但它更像是积累,我得到以下结果:

Observable.merge(observable, observable2).reduce(new BiFunction<String, String, String>() {
        @Override
        public String apply(String wordAccum1, String word2) {
            return wordAccum1 + " " + word2;
        }

    }).subscribe(new Consumer<String>() {
        @Override
        public void accept(String sentence) throws Exception {
            Log.v("consumerResult",sentence+"");
        }
    });
Run Code Online (Sandbox Code Playgroud)

日志输出显示:consumerResult:你好今天的做法

我怎么能连续从每个人那里拿走?

rx-java2

0
推荐指数
1
解决办法
50
查看次数

Curry 函数 - 如何调用 3 个(或多个)函数?

我试图在 kotlin 中咖喱一个函数,这样我就可以这样称呼它

myAdditionFunction(1)(2)(3)
Run Code Online (Sandbox Code Playgroud)

这个调用将返回 6 因为1+ 2 + 3 = 6

我只需要它对所有数字进行加法。实际上我真的希望它在未来做一个构建器模式,但仍然试图看看 curry 函数是如何工作的。这是我到目前为止所拥有的:

fun myAdditionFunction(x: Int) {     { y: Int -> x + y }
Run Code Online (Sandbox Code Playgroud)

这适用于两个参数。所以 myAdditionFunction(1)(2) 将打印 3。

我希望它适用于 3 个或多个:这是我为 3 个参数尝试过的:

fun myAdditionFunction(x: Int) {
        var sum = 0
        return { y: Int ->
             sum = x + y
            sum }
        }
Run Code Online (Sandbox Code Playgroud)

我如何将总和向前推进以及如何使其采用第三个内部功能?它不会编译。

但它不会编译

currying kotlin

0
推荐指数
1
解决办法
666
查看次数

Androidx OnBackPressedDispatcher - 如何消耗后退按钮按下

我有时希望 onBackPressedDispatcher 吸收后退按钮的按下,但我看不到它的选项。发生的事情是我们今天刚刚尝试升级到 androidX 中的 onBackPressedDispatcher,但我们已经在活动中覆盖了 onBackPress。所以当我们的 onBackPressedDispatcher 之后调用 OnBackPressedCallback 时,也会调用 onBackPressed 覆盖活动。我们不想要那个。onBackpressed 应该当场食用。这是我到目前为止所拥有的:

    const val TAG = "MyTag"

class MyActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_first)
        MyTester(this)
    }

    override fun onBackPressed() {
        super.onBackPressed()
        Log.v(TAG, "Activities class back button Pressed")

    }

    inner class MyTester(var activity: AppCompatActivity) {
        init {
            addBackCB()
        }

        fun addBackCB() {
            var callback = object : OnBackPressedCallback(true) {
                override fun handleOnBackPressed() {
                    Log.v(TAG, "inner class MyTester back button")
                }
            }
            activity.onBackPressedDispatcher.addCallback(activity, callback);
        } …
Run Code Online (Sandbox Code Playgroud)

onbackpressed androidx

0
推荐指数
1
解决办法
4462
查看次数