我在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) 我正在尝试使用 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) 我正在搜索一个正则表达式,我可以用它来检查用户输入是否包含指定列表中的特殊字符。
以下是我尝试编写的正则表达式不允许使用的特殊字符: ^[`~!@#$%^&*()_+={}\[\]|\\:;“’<,>.???]*$
我去了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)
更新:我也尝试了以下操作:
我试图了解何时在泛型中使用“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”,我们可以将子类传入该类以在内部使用,但不能向外使用。
我正在尝试创建一个自定义插件,可以在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) 我想创建一个实用程序方法,它可以接受一个列表并按其字符串值对其进行排序.但我似乎无法弄清楚如何编写通用的参数.这是我到目前为止:
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"这一行在编译时抱怨我没有传递正确的东西.我怎样才能实现这一目标?
我使用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?
我有两个可观察者,我想从每个观察者中取出,直到两者都没有.有没有运营商这样做?让我向您展示我尝试过的内容以及我想要完成的内容:
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:你好今天的做法
我怎么能连续从每个人那里拿走?
我试图在 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)
我如何将总和向前推进以及如何使其采用第三个内部功能?它不会编译。
但它不会编译
我有时希望 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)