我有两种默认的构建类型:debug/release和几种风格:prod/dev.
现在我想排除构建变体dev-release,但保留所有其他可能的组合.有没有办法实现这个目标?
我有一个Observable,无需发出值即可完成某些操作.我还有一个我希望Observable可以使用的对象列表.因此对于此列表中的所有元素:doSomething()
Observable.from(uris)
.flatMap(new Func1<Uri, Observable<Void>>() {
@Override
public Observable<Void> call(Uri uri) {
return createDoSomethingObservable(uri);
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<Void>() {
@Override
public void onCompleted() {
Log.d(TAG, "completed");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Void aVoid) {
Log.d(TAG, "next");
}
});
Run Code Online (Sandbox Code Playgroud)
以及创建Observable的方法:
Observable<Void> createDoSomethingObservable(final Uri uri) {
return Observable.create(new Observable.OnSubscribe<Void>() {
@Override
public void call(Subscriber<? super Void> subscriber) {
//doSomething
subscriber.onNext(null);
subscriber.onCompleted();
}
});
}
Run Code Online (Sandbox Code Playgroud)
现在,当我使用带有3个元素的List运行时,我得到:
next
next
next
completed
Run Code Online (Sandbox Code Playgroud)
这很好,因为这就是我想要的,但我不知道它为什么会起作用.首先我开始调用onComplete,因为最终observable完成了它的工作并完成了.但当然onNext永远不会在订阅者上调用.反过来也是如此.
所以我的问题是:
我创建了一个非常基本的RecyclerView示例.
布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MyActivity">
<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
活动:
public class MyActivity extends Activity {
RecyclerView mRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
mRecyclerView.setAdapter(new TestAdapter());
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
}
public static class TestAdapter extends RecyclerView.Adapter<TestAdapter.ViewHolder> {
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(android.R.layout.simple_list_item_1, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
viewHolder.tv.setText("Row " + (i + 1)); …Run Code Online (Sandbox Code Playgroud) 如前所述这里我应该能够改变我的动作条的颜色,如果我定义我的风格原色.
<style name="AppTheme" parent="android:Theme.Material">
<item name="android:colorPrimary">#ff0000</item>
</style>
Run Code Online (Sandbox Code Playgroud)
但是颜色仍然是浅灰色的默认颜色.我错过了什么吗?
android android-actionbar material-design android-5.0-lollipop
在新的设计指南(向下滚动到底部)中,您可以看到标签在新材料设计中的外观.TabHost然而我仍然看起来非常Holo,没有底线动画,没有涟漪效果.这是我们必须自己实施的吗?
android android-tabhost android-tabs material-design android-5.0-lollipop
假设我们有两个片段:A和B
A 是可见的,我们要替换为 B
A有一个exitTransition,B有一个enterTransition
这两个过渡都定义了TransitionPropagation,它们用于延迟某些动画。那些通过TransitionPropagations收集启动延迟所需的值captureValues。
将交易从提交A到时的期望B:
TransitionPropagation.captureValues被称为来自所有相关视图A的布局为exitTransition的ATransitionPropagation.captureValues被称为来自所有相关视图B的布局为enterTransition的B我看到:
TransitionPropagation.captureValues被称为从所有相关意见A的布局为exitTransition的A,然后TransitionPropagation.captureValues也被称为上意见相同的传播在B的布局中定义的。
这是怎么回事 为什么欣赏到B定向到exitTransition的A?
android android-animation android-layout android-transitions fragment-transitions
我正在寻找一种方法来定义他们的孩子使用的视图的自定义属性.例如layout_centerInParent,儿童RelativeLayouts或layout_span儿童的儿童TableLayouts.
android android-custom-view android-layout android-custom-attributes
在我找到的示例(此处或此处)中,我看到它derivedStateOf始终包装在一个remember块中。检查重组计数,我没有看到两者之间的区别
val foo = remember { derivedStateOf { someState } }
Run Code Online (Sandbox Code Playgroud)
和
val foo = derivedStateOf { someState }
Run Code Online (Sandbox Code Playgroud)
谁能给我举一个结果会有所不同的例子吗?
编辑:所以我在这个例子中得到了不同的结果:
@Composable
fun Test() {
var count by remember {
mutableStateOf(0)
}
val moreThanOne = derivedStateOf {
Log.d("foo", "Calculate")
count > 1
}
Log.d("foo", "Read")
moreThanOne.value
Button(
onClick = {
Log.d("foo", "Clicked")
count += 1
}
) {
Text(text = "Increment")
}
}
Run Code Online (Sandbox Code Playgroud)
单击按钮两次会显示以下日志:
Read
Calculate
Clicked
Calculate
Clicked
Calculate
Read
Calculate …Run Code Online (Sandbox Code Playgroud) android kotlin android-jetpack-compose android-jetpack-compose-ui
我很难理解协程。这是一个非常简单的设置。和longComputation都是delay挂起函数。第一个阻塞主线程,后者则不会。为什么?
CoroutineScope(Dispatchers.Main).launch {
val result = longComputation() // Blocks
delay(10_000) // Doesn't block
}
Run Code Online (Sandbox Code Playgroud) 我的目标是 android 10,我不使用android:requestLegacyExternalStorage. 我用的是DownloadManager通过下载到下载文件夹:request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName)。我收听下载完整广播,提取 uri ( file:///storage/emulated/0/Download/<name>.pdf) 并通过 .pdf 文件在 pdf 阅读器中打开它FileProvider。它有效......为什么?自 android 10 和范围存储以来,它不应该不起作用吗?为什么我可以访问下载文件夹中的文件?
编辑:Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).listFiles()列出所有文件,尽管文档说:
为了提高用户隐私,不推荐直接访问共享/外部存储设备。当应用以 Q 为目标时,此方法返回的路径不再可供应用直接访问
android android-download-manager storage-access-framework android-10.0 scoped-storage