我想像这样画一个边框Text,
Text("Box around text",
modifier = Modifier
.padding(top = 8.dp)
.border(width = 2.dp, color = Color.Red)
.background(Color.DarkGray))
Text("Box around text with a very very very very longlonglonglongword",
modifier = Modifier
.padding(top = 8.dp)
.border(width = 2.dp, color = Color.Red)
.background(Color.DarkGray)
)
Run Code Online (Sandbox Code Playgroud)
但在多行文本的情况下,它看起来不太好。
右侧边框和文本之间有一个间隙。
那么如何在多行文本周围绘制边框,使其适合文本宽度呢?
Anko文档告诉我们如何向DSL添加自定义视图.但如果我的自定义视图是一个视图组,则会出现问题.
class MyFrameLayout(context: Context) : FrameLayout(context)
fun ViewManager.myFrameLayout(init: MyFrameLayout.() -> Unit = {}) = ankoView({ MyFrameLayout(it) }, init)
class MyUI : AnkoComponent<Fragment> {
override fun createView(ui: AnkoContext<Fragment>) = with(ui) {
myFrameLayout {
textView("hello").lparams { // error: Unresolved reference: lparams
bottomMargin = dip(40)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但如果我将myFrameLayout调用更改为frameLayout它就可以了.那么,什么是使视图组与Anko DSL一起使用的正确方法?
我有以下代码:
val map = HashMap<Int, Any>()
fun <T> test(t: T) = map.put(0, t) // Type mismatch: inferred type is T but kotlin.Any was expected
Run Code Online (Sandbox Code Playgroud)
但是每个Kotlin类都有Any作为超类,为什么会出现这个错误呢?
关于Kotlin中可见性修饰符的官方文档说,标记的包级元素private仅在声明它们的模块中可见.
A声明的类在中Module1.kt是不可见的Module2.kt.但是,如果我尝试添加到Module2.kt它自己的类,A我会得到Redeclaration: A错误.
因为我不能访问Module2.kt到Module1的A类,为什么不是名字A随意使用?
我有以下课程(简化):
public class Usecase<T> {
private final Observable<T> get;
private final Scheduler observeScheduler;
public Usecase(Observable<T> get, Scheduler observeScheduler) {
this.get = get;
this.observeScheduler = observeScheduler;
}
public Observable<T> execute() {
return get.subscribeOn(Schedulers.io()).observeOn(observeScheduler);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在为它编写单元测试.如何测试subscribeOn并observeOn使用正确的值调用?
我尝试以下方法:
Observable<String> observable = mock(Observable.class);
Usecase<String> usecase = new Usecase(observable, Schedulers.computation());
usecase.execute();
verify(observable).subscribeOn(Schedulers.computation()); // should fail here, but passes
verify(observable).observeOn(Schedulers.computation()); // should pass, but fails: Missing method call for verify(mock) here
Run Code Online (Sandbox Code Playgroud)
以上失败(我认为)因为subscribeOn而且observeOn是final方法.那么可能还有其他方法可以确保observable使用正确的调度程序?
我有一个可组合按钮,可以根据状态显示文本或加载程序
enum class State { NORMAL, LOADING }
@Composable
fun MyButton(onClick: () -> Unit, text: String, state: State) {
Button(onClick, Modifier.height(60.dp)) {
if (state == State.NORMAL) {
Text(text, fontSize = 32.sp)
} else {
CircularProgressIndicator(color = Color.Yellow)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我这样使用它:
MyButton(
onClick = {
state = if (state == State.NORMAL) State.LOADING else State.NORMAL
},
"hello",
state
)
Run Code Online (Sandbox Code Playgroud)
但进入状态时按钮会缩小loading。我如何在状态中测量它,以便稍后normal在状态中分配这个测量的宽度?loading
我是CSS初学者.基本上我有以下html:
<ul>
<li><a href="news.html">? ???</a></li>
<li><a href="#">???????</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我希望在悬停我的a标签时有一个粗的下划线,但我使用带有大下划线的自定义字体,所以如果我使用常见技巧:
a:hover {
text-decoration: none;
border-bottom: 2px solid;
padding: 0;
margin: 0;
}
Run Code Online (Sandbox Code Playgroud)
下划线远低于基线:
但我希望它看起来像这样: 
我试着这样做:
<ul>
<li class="over"><a href="news.html">? ???</a></li>
<li class="over"><a href="#">???????</a></li>
</ul>
.over{
font-size: 30px;
height:30px; // makes the text overlap this element
overflow:visible;
}
.over:hover {
border-bottom: 2px solid #ec6713;
}
Run Code Online (Sandbox Code Playgroud)
但是现在所有字符串的下划线宽度都是相同的: 
然后我说display: inline-block;了.over.但我得到了这个:
然后,我改变inline-block到table,但再次下划线远远低于:
我最后添加了一个额外的span,所以现在我有:
<ul>
<li><span class="over"><a href="news.html">? ???</a></span></li>
<li><span class="over"><a href="#">???????</a></span></li>
</ul>
.over{ …Run Code Online (Sandbox Code Playgroud) 我想要一个带有自定义字体,颜色和左侧子弹的标题的CSS选择器.所以我希望我的标题使用我的自定义字体,并且:before使用font-awesome 是伪元素.所以我希望我:before有这个.fa类,而整个元素没有这个类.
我有这个HTML:<h1 class="bulleted-header">Hello</h1>我想在LESS写这样的东西:
.bulleted-header {
color: #61cbe6;
font: 16px 'ds_goose', sans-serif;
&:before {
content: @fa-var-bullseye; // font-awesome's bullet icon
.fa; // calling font-awesome's class. DOESN'T COMPILE
}
}
Run Code Online (Sandbox Code Playgroud)
问题是.fa类在font-awesome LESS源中声明如下:.@{fa-css-prefix} { ... }所以上面的代码不能编译.我试图重用这样的.fa代码:
&:before {
content: @fa-var-bullseye; // font-awesome's bullet icon
.@{fa-css-prefix}; // DOESN'T COMPILE
}
Run Code Online (Sandbox Code Playgroud)
和这样:
&:before:extend(.@{fa-css-prefix}) { // compiles but no effect
content: @fa-var-bullseye; // font-awesome's bullet icon
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以像这样改变我的html <h1 class="bulleted-header"><span class …
我有这样的EditText定义:
<EditText
android:id="@+id/input_password"
android:hint="@string/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPassword" />
Run Code Online (Sandbox Code Playgroud)
它有一些默认的填充,看起来像"Show layout bounds"选项:
(或者它真的是边缘,我不确定.我指的是红色内盒和蓝色角落之间的空间).但这些填充/边距的价值是多少?在platforms/android-19/data/res/values/themes.xml我发现的Widget.EditText样式定义如下:
<style name="Widget.EditText">
<item name="android:focusable">true</item>
<item name="android:focusableInTouchMode">true</item>
<item name="android:clickable">true</item>
<item name="android:background">?android:attr/editTextBackground</item>
<item name="android:textAppearance">?android:attr/textAppearanceMediumInverse</item>
<item name="android:textColor">?android:attr/editTextColor</item>
<item name="android:gravity">center_vertical</item>
</style>
Run Code Online (Sandbox Code Playgroud)
但是没有提到任何边距/填充.那他们在哪里定义?