LinearLayout为什么不按比例分配收缩?

我的理解是,LinearLayout应该根据子元素的布局权重分配松弛(额外空间)和/或缩小(负额外空间)。 这似乎工作,因为我期望松懈,但不是收缩。 以下的android Activity演示。 它显示了9列(垂直LinearLayouts),拥挤程度不同。 9列中的每一列都有两个孩子: 第一个孩子是由3个单选按钮组成的子列,分别标有“A”,“B”,“C” 第二个孩子是由2个单选按钮组成的子列,分别标记为“0”,“1” 每个子列的权重与其中单选按钮的数量(3或2)成正比,子列中每个单选按钮的权重为1。 我选择了这些权重,以便在其子孙(单选按钮)中平均分配列的额外空间(负值或正值),以便给定列中的所有5个单选按钮的大小相同。 如下图所示(开发人员选项“显示布局边界”启用),它似乎按照预期的方式工作(右侧的红色列),但不适用于缩小(蓝色列,左侧)。 在最拥挤的(最左边的)列中,这个差异是最明显的,前三个单选按钮比两个表兄弟小得多。 这是LinearLayout的预期行为? 或者它是LinearLayout中的一个错误? 或者在我的程序中的错误? 这里的程序列表(在Kotlin ): // app/src/main/java/com/example/donhatch/linearlayoutweightsquestionactivity/MainActivity.kt // Simple activity to test LinearLayout’s slack/shrinkage distribution behavior. package com.example.donhatch.linearlayoutweightsquestionactivity import android.graphics.Color import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.widget.LinearLayout import android.widget.RadioButton import android.widget.RadioGroup class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val c […]

如何模仿或实现Kotlin数据类的IS-A关系

我一直在探索Kotlin,写了一个小程序/脚本来完成我觉得无聊的任务。 在程序的开发中,我使用数据类来表示播放列表。 在设计中的一个点上,我想有一个特殊types的Playlist EmptyPlaylist 。 我无法得到这个工作。 你将如何实现与Kotlin的这种关系? 在Java中,我只是扩展Playlist (或者可能为它们创建一个接口/抽象类来inheritance)。 我只是希望能够有一个List而不是List 最后,我创建了一个Playlist对象,但是我感兴趣的是可以创建带有数据类的IS-A层次结构。

如何检测Data class Kotlin中更改的值?

我想检测我的类的属性更改的任何值,所以然后我可以做其他的操作。 换句话说,如果一个属性的特定数据之一被改变,那么一个特定的事件将会触发。 实际上,如果它是另一种编程语言(如Java)中的普通类,那么我认为可以在修改完数据之后使用setter来完成这项工作,或者在C#中使用委托。 但是因为Kotlin是非常新的,我根本找不到任何解决方案。 我试图超载财产,但没有任何机会成功。 我也想用这个接口来实现,但是由于它是数据类,所以我不知道该怎么做。 下面是示例类。 在这种情况下,如何检测年龄或名称更改的时间? data class Person(var Name: String, var Age: Int) 所以如果有人有任何想法,请帮助。 注意:在我的情况下,必须使用数据类。

如何在不使用科学记数法的情况下使用Java打印双重值?

我想打印一个没有指数forms的Java的double值。 double dexp = 12345678; System.out.println(“dexp: “+dexp); 它显示了这个E符号: 1.2345678E7 。 我想要它像这样打印它: 12345678 防止这种情况的最好方法是什么?

如何使用Fragment的数据绑定

我试图从官方的谷歌文档https://developer.android.com/tools/data-binding/guide.html数据绑定的例子 除了我试图将数据绑定应用于片段而不是活动。 我正在编译的错误 Error:(37, 27) No resource type specified (at ‘text’ with value ‘@{marsdata.martianSols}. onCreate的片段如下所示: @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); MartianDataBinding binding = MartianDataBinding.inflate(getActivity().getLayoutInflater()); binding.setMarsdata(this); } onCreateView的片段看起来像这样: @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.martian_data, container, false); } 部分我的布局文件的片段如下所示: … 我的怀疑是, MartianDataBinding不知道它应该绑定哪个布局文件 – 因此错误。 有什么建议么?

针对构造函数中注入次数的Lint规则

我试图在我的Android代码中创建一个Lint规则,检查构造函数中是否注入数字,所以如果我为视图模型超过了某个数字,例如,我将引发一个lint警告。 我知道我必须在我的Lint探测器中实施一个UastScanner,但是我迷路了,因为我找不到好的文档。 还有别人做过这样的事吗? 或者我可以在哪里find好的文档? 谢谢!

Kotlin:如何创建一个Stringtypes的二维数组

我在学习kotlin。 我需要创建一个二维数组,它可以容纳单词,特殊字符和数字。在某些地方,我发现这段代码这个问题是,它只能容纳诠释。 当我试图用“字符串”替换关键字“IntArray”。 它返回一个错误错误有人可以帮助我创建一个可以在Kotlin中保存字符串的10×8 Arrray

请使用“首次离线aproach”解释android架构。

我的应用程序架构,很常见: 例如,如果我有实体列表,请解释我 @Entity(tableName = TABLE_NAME) class Item constructor( @PrimaryKey(autoGenerate = false) var id: Long = 0L, @TypeConverters(ListToStringConverter::class) var eventDescription: List = emptyList(), @TypeConverters(DateConverter::class) var date: Date = Date(), var rate: Int ?= null) 图片说明: 目前我做(根据上图): 来自Repository的mLiveData getLiveData 回调refreshFromDataBase() DataBase的mLiveData.addSource的LiveData – 导致Android View快速更新的原因 回调refreshFromNetwork() rest更新DatabaseTable 数据库插入导致LiveData添加将更改推送到视图 问题的提出 5步的最佳做法是什么?一旦有新数据出现,我必须用最新的数据取代旧数据? 目前我正在使用RxJava,Room,Kotlin和我在步骤3中使用嵌套的Rx.Single这是非常丑陋的代码。 喜欢 disposable = usecase.getDataFromNetwork() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeBy(onSuccess […]

如何在部署应用程序引擎应用程序时设置自定义版本?

我正在将应用部署到Google应用引擎标准。 这是一个Java / Kotlin应用程序,但问题不一定是特定的。 我正在使用最新的Gradle插件,答案可能是特定的。 像所有这些年,我指定一个项目ID,让我们说MyProject ,和一个版本号/字符串,让我们说1-2-0 。 这两个信息历史将进入appengine-web.xml文件(Python的app.yaml )。 他们仍然可以在那里设置,但是却被忽略了,因为部署过程突出地指出了。 现在必须将项目ID MyProject指定为通用glcoud命令行界面配置(可通过gcloud config configurations list )的一部分。 Gradle插件似乎从那里捡起来就好了。 然而, 对于 1-2-0 版本 ,我无法弄清楚在哪里以及如何设置它。 所以,在部署时,我总是会得到一个像20170604t124930这样的新的默认值,以及大量的冗余应用程序版本。 对于我使用appcfg (或者它是glcoud命令?)的先前的Python应用程序来进行部署,我将项目ID和版本都指定为命令行参数。 Gradle pluging必须在其他地方find(或不find)这个信息。 Gradle文件的version = ‘1.2.0-SNAPSHOT’当然就是生成的jar / war。 网络上的许多建议,官方的Google文档(!)和这里的这个网站都是过时的,矛盾的,或者两者兼而有之( 因此,你们可以原谅我冗长的,相当详细的post )。 谢谢!

为什么我的D代码不像预期的那么高性能?

我正在为自己的乐趣做一个基准测试! 我用许多编程语言编写了一部分代码,并使用ab进行基准测试,以查看哪个更快,更快。 我知道这个方法可能不是那么有效,不能用作一些明显的用法,但是为了我自己的信息,我正在这样做。 我想知道的另一个因素是在每种语言中编写相同的样本是多么容易/困难。 我用Python / Python(asyncio),Haskell,Go,Kotlin和D编写了代码。我认为D端口比Go更快(或者至少等于速度)。 但不幸的是我的D代码比Go慢得多。 在这里,我把其他代码,请帮助我为什么代码不如预期的那么快。 或者我的期望绝对错了? import cbor; import std.array : appender; import std.format; import std.json; import vibe.vibe; struct Location { float latitude; float longitude; float altitude; float bearing; } RedisClient redis; void main() { auto settings = new HTTPServerSettings; redis = connectRedis(“localhost”, 6379); settings.port = 8080; settings.bindAddresses = [“::1”, “127.0.0.1”]; […]