是否可以检查某个函数是否已在 Jetpack compose 中以预览模式运行?我有一个函数返回一个正确的字符串以在应用程序中使用,但该函数使用一些禁用@Composable组件预览模式的对象。我可以做的是将val isPreview: Boolean = false标志传递给每个组件,然后运行一个简化的函数(如果标志是)true,但这会向每个可组合项添加一些样板代码。
有没有办法以编程方式滚动LazyColumn到列表中的某个项目?我认为可以通过提升LazyColumn参数来完成,state: LazyListState = rememberLazyListState()但我不知道如何更改此状态,例如单击按钮。
android kotlin android-jetpack-compose android-jetpack-compose-list
如何Row按基线对齐 a 内的元素。我的问题是我想要一个Row包含多个Text元素的元素,并且每个Text元素都有不同的字体和大小。默认情况下,它们在顶部对齐。我需要它们在底部对齐。这是代码:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MaterialTheme {
Row {
Text(
text = "Abrakadabra",
style = TextStyle(fontSize = 22.sp, fontWeight = FontWeight.Bold)
)
Text(
text = "Abrakadabra",
style = TextStyle(fontSize = 14.sp, fontWeight = FontWeight.Bold)
)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是代码的渲染视图:
android android-layout kotlin android-jetpack android-jetpack-compose
在我这样res/font定义:font-family
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font app:fontStyle="normal" app:fontWeight="400" app:font="xyz_1"/>
<font app:fontStyle="normal" app:fontWeight="500" app:font="xyz_2"/>
</font-family>
Run Code Online (Sandbox Code Playgroud)
如何将其加载到 Jetpack Compose 中并将其用作FontFamily对象?
我正在使用刀柄。更新后,1.0.0-alpha03我收到了@ViewModelInject已弃用的警告,我应该使用@HiltViewModel. 但是当我改变它时,我得到了一个错误:
java.lang.RuntimeException: Cannot create an instance of class com.example.LoginViewModel
...
Caused by: java.lang.NoSuchMethodException: com.example.LoginViewModel.<init> [class android.app.Application]
Run Code Online (Sandbox Code Playgroud)
以前我的 ViewModel 看起来像这样:
java.lang.RuntimeException: Cannot create an instance of class com.example.LoginViewModel
...
Caused by: java.lang.NoSuchMethodException: com.example.LoginViewModel.<init> [class android.app.Application]
Run Code Online (Sandbox Code Playgroud)
现在它看起来像这样:
class LoginViewModel @ViewModelInject constructor(
application: Application,
private val repository: RealtimeDatabaseRepository
) : AndroidViewModel(application)
Run Code Online (Sandbox Code Playgroud)
注入 ViewModel 的片段:
@HiltViewModel
class LoginViewModel @Inject constructor(
application: Application,
private val repository: RealtimeDatabaseRepository
) : AndroidViewModel(application)
Run Code Online (Sandbox Code Playgroud)
注入类:
@AndroidEntryPoint
class LoginFragment : Fragment(R.layout.fragment_login)
{
private …Run Code Online (Sandbox Code Playgroud) 如果某个字符串以 in 中的字符结尾,arrayOf(X, Y, Z)我想将其替换为 new char A。我不知道该怎么做,我尝试过的一切都不起作用。
我在尝试完全以编程方式制作此布局时遇到问题,每次进程运行结束时都没有成功并且应用程序崩溃。
我试图以编程方式创建的 XML 部分是:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/idImagenPlay0"
android:layout_width="62dp"
android:layout_height="54dp"
android:layout_marginRight="10dp"
android:layout_marginTop="15dp"
android:src="@drawable/ic_action_play" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/idNombre0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="Description"
android:textSize="25sp"
android:textStyle="bold" />
<TextView
android:id="@+id/idInfo0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="15dp"
android:layout_marginRight="10dp"
android:text="Title" />
</LinearLayout>
<ImageView
android:id="@+id/idImagenShare0"
android:layout_width="54dp"
android:layout_height="48dp"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:layout_marginTop="15dp"
android:src="@drawable/ic_action_share" />
</RelativeLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用以下 kotlin 代码重新创建它:
fun createXmlElement(title:String,description:String){
val parent = LinearLayout(this)
parent.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT)
parent.orientation = LinearLayout.HORIZONTAL
//children of parent linearlayout
val iv = ImageView(this)
val lp = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, …Run Code Online (Sandbox Code Playgroud) 我有一个自定义 ListView,其中有一些 TextView 和几个按钮。单击每个按钮时会打开一个新活动。
问题是,假设我当前正在查看第 15 个 ListView 项目并单击打开新活动的按钮。从活动返回时,ListView 返回到第一个项目,但我希望它从我离开开始新活动的视图(在本例中为第 15 个项目)恢复。我怎样才能做到这一点?
我是android开发的新手,所以不知道要搜索哪个关键字来解决这个问题!
任何帮助表示赞赏:)
android listview listviewitem android-listview android-activity
如何根据 NavController 中的实际位置显示TopAppBar使用中的导航图标(后退箭头或菜单)?Scaffold我正在使用Navigating with Compose 1.0.0-alpha02。下面是一个示例代码,描述了它应该如何工作
@Composable
fun App()
{
val navController = rememberNavController()
Scaffold(
topBar = {
TopAppBar(
title = { Text(text = "App title") },
navigationIcon = {
/*
Check if navController back stack has more
than one element. If so show BackButton.
Clicking on that button will move back
*/
val canMoveBack = true
if (canMoveBack)
{
IconButton(onClick = {
// Move back
navController.popBackStack()
}) {
Icon(asset = Icons.Outlined.ArrowBack)
}
} …Run Code Online (Sandbox Code Playgroud) android kotlin android-jetpack-navigation android-jetpack-compose
android ×9
kotlin ×7
android-jetpack-compose-list ×1
dagger-hilt ×1
listview ×1
listviewitem ×1