我在android中看到了关于MVP模式的各种精彩教程,但作者们似乎都在包装上有不同的练习.
我看到的第一个教程按功能进行了打包.如,"登录","加入","UI"包.
UI包只有活动,"Login"包具有演示者和具体演示者的接口,并且该包包含子包"Model",其中包含有关登录模型的所有内容(与服务器的通信)."Join"包与"Login"包具有相同的组成.
但是我看到的另一个按场景打包,例如"加入","登录".
"Join"包中包含一个活动,以及三个名为"Model","View","Presenter"的子包.
什么是最佳做法?有没有处理这个问题的文章?
我正在尝试制作一个填充屏幕宽度的 editText,它的提示和输入从屏幕中心开始。
我选择BasicTextField,因为TextField 和OutlinedTextFields 的样式对我来说完全不需要。
我尝试过这样做。
BasicTextField(
value = loginId,
onValueChange = {
loginId = it
},
decorationBox = {
Text(text = "Input your id", modifier = Modifier.align(Alignment.CenterHorizontally).fillMaxWidth())
},
modifier = Modifier
.fillMaxWidth()
.padding(start = 19.dp,
bottom = 4.5.dp, end = 19.dp, top = 40.dp)
.background(Purple200)
.align(Alignment.CenterHorizontally),
)
Run Code Online (Sandbox Code Playgroud)
这没有效果。我能用这个做什么?
android android-jetpack-compose android-jetpack-compose-text
通过“设置/显示”放大屏幕,我发现我的 Galaxy s9+ 的屏幕密度从 430 dpi 变为超过 600 dpi。
这使得布局和图像从 xxhdpi 更改为 xxxhdpi。
如果我有一个固定大小为 16dp 的 textView,
在 xxhdpi 中它是 16 * 3 px,在 xxxhdpi 中将变成 16 * 4 px。
这使得我的布局(当然来自 editTexts 或 textViews 的文本)变得更大,因为设备的实际密度永远不会改变,谷歌(或制造商 samsumg)打算为此功能。
但我不希望这种情况发生在我的应用程序中。
我试图通过这样做来修复它;
Configuration configuration = activity.getResources().getConfiguration();
if (configuration.densityDpi != 430) {
configuration.densityDpi = 430;
}
DisplayMetrics metrics = activity.getResources().getDisplayMetrics();
WindowManager wm = (WindowManager) activity.getSystemService(activity.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(metrics);
metrics.scaledDensity = configuration.densityDpi * metrics.density;
activity.getResources().updateConfiguration(configuration, metrics);
Run Code Online (Sandbox Code Playgroud)
这迫使屏幕密度变为 430,并且在 Galaxy s9+ 上运行良好。但事实上,并非所有设备的默认密度都是 430。
如何确定运行我的应用程序的设备的默认密度?
或者是否有配置可以忽略我的应用程序的放大效果?
我有一个存储在Viewmodel
via内的列表Stateflow
。
class FirstSettingViewModel : ViewModel() {
private val _mRoomList = MutableStateFlow<List<InitRoom>>(mutableListOf())
val mRoomList: StateFlow<List<InitRoom>> = _mRoomList
...
Run Code Online (Sandbox Code Playgroud)
我通过 观察流程collectAsState()
。它LazyColumn
由可以单击的框组成。
val roomList = mViewModel.mRoomList.collectAsState()
Dialog {
...
LazyColumn(...) {
items(roomList.value, key = { room -> room.room_seq}) { room ->
Box(Modifier.clickable {
**mViewModel.selectItem(room)**
}) {...}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当单击事件发生时,viewModel 通过复制列表更改“isSelected”值,如下所示。
fun selectItem(room: InitRoom) = viewModelScope.launch(Dispatchers.IO) {
try {
val cpy = mutableListOf<InitRoom>()
mRoomList.value.forEach {
cpy.add(it.copy())
}
cpy.forEach {
it.isSelected = it.room_seq == room.room_seq
} …
Run Code Online (Sandbox Code Playgroud) android android-jetpack-compose kotlin-stateflow lazycolumn compose-recomposition
我正在使用 Retrofit2 和简单的 xml 解析器将 xml 值解析为类。
但是,我从未遇到过这些内联(?)标签。api 返回一些内容,但响应正文为 null。
xml 如下所示。
<?xml version="1.0" encoding="ISO-8859-1"?>
<Book title="Title Name" ver="20190513001" coverimg="PPO01.jpg" bookcode="PPO01">
<chapters count="1">
<chapter endflag="000" thumbnail="PPO0101_TN.jpg" chaptercode="PPO0101" num="1">
<chaptername>ChapterName</chaptername>
<movies count="1">
<movie num="1" name="Movie Name" url="Some Url" type="AR">
<directions count="0"/>
</movie>
</movies>
</chapter>
</chapters>
</Book>
Run Code Online (Sandbox Code Playgroud)
我对此的响应代码如下所示。
根对象。
@Root(name = "Book", strict = false)
public class XmlBook implements Serializable {
@Element(name = "title")
private String title;
@Element(name = "ver")
private String ver;
@Element(name = "coverimg")
private String coverimg;
@Element(name = "bookcode") …
Run Code Online (Sandbox Code Playgroud) 我在浏览 compose 桌面教程时遇到问题。
我有两个关于撰写桌面基础知识的问题。
首先,有没有办法为整个窗户添加标高?
其次,有没有办法设置窗口的最小尺寸? 当我单击窗口边缘时,即使没有显示任何箭头,也可以调整窗口大小,但我找不到对其最小尺寸添加约束的方法。它会闪烁直至消失。
我当前的预览如下所示。
我的代码看起来像这样。
fun main() = application {
val windowState = rememberWindowState()
windowState.size = WindowSize(392.dp, 642.dp)
var isVisible by remember { mutableStateOf(true) }
val trayState = rememberTrayState()
Tray(
state = trayState,
icon = TrayIcon,
hint = "PickMessengerV2",
onAction = {
isVisible = true
},
menu = {
Item(
"Exit",
onClick = {
exitApplication()
}
)
}
)
Window(
onCloseRequest = {
isVisible = false
},
state = windowState,
undecorated = true,
resizable …
Run Code Online (Sandbox Code Playgroud) android ×5
android-jetpack-compose-text ×1
lazycolumn ×1
mvp ×1
package ×1
retrofit2 ×1
xml-parsing ×1