关于 Android 上使用 Java 的 Sax XML 解析器的问题:我需要解析从 Web 获取的 XML 文件,但我无法控制该文件。有些包含错误并导致解析器因“标签不匹配”或“格式不正确(无效标记)”等错误而中止。
这些错误对我来说并不重要,我想忽略它们并继续前进,我可以处理损坏的 XML 结构。但我无法修复 XML 文件,它们不是我的。我如何告诉 Android 上的 Sax(类 org.xml.sax.XMLReader)不要抛出异常并继续运行?附加 ErrorHandler 不起作用,捕获异常也没有用,因为我无法在停止的地方继续解析。
我的 XML 不是 HTML,但这里有一些 (X)HTML 示例,浏览器会忽略错误并继续运行。我也想做这个。
我不想编写自己的解析器来处理字符集转换等。我不需要验证 XML。这是我的代码,精简为要点:
XMLReader r = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
r.setErrorHandler(new MyLenientErrorHandlerThatNeverThrows());
r.setContentHandler(new MyImporterThatExtendsDefaultHandler());
r.parse(new InputSource(new BufferedReader(...)));
Run Code Online (Sandbox Code Playgroud)
谢谢!
我想知道放置以下字符串资源的最佳位置。我想创建一个位置过滤框,用户可以根据“地区”、“地铁站”、“地标”等至少 2-3 种语言来选择位置。
同时,我通过在项目中的“strings.xml”中使用“Sring-array”来实现此功能,这应该允许我处理多语言。
<string-array name="HK_Districts">
<item >Tsim Sha Tsui</item>
<item >Causeway Bay</item>
....
</string-array>
Run Code Online (Sandbox Code Playgroud)
这种方法应该适用于单个城市,但如果我想扩展到其他城市,我只是认为这会在“strings.xml”中创建超过 10'000 行,这对于数据管理来说似乎非常复杂。
我是 Android 新手,想知道是否有更好的替代方法来解决这个问题,例如使用“assets”文件夹等。
我有一个自定义的 android 开关,其定义如下
<Switch
android:id="@+id/create_site_switch_ssl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|left"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:paddingLeft="50dp"
android:paddingRight="50dp"
android:checked="true"
android:gravity="center_vertical"
android:thumb="@drawable/btn_gradient" />
Run Code Online (Sandbox Code Playgroud)
和拇指选择器项目像这样
<item android:state_enabled="true" android:state_focused="false" android:state_pressed="false">
<shape android:shape="rectangle">
<gradient
android:startColor="@color/Blue100"
android:endColor="@color/Blue50"
android:angle="90"/>
<padding android:left="@dimen/button_padding"
android:top="@dimen/button_padding"
android:right="@dimen/button_padding"
android:bottom="@dimen/button_padding" />
<corners android:radius="@dimen/button_corner"/>
<stroke android:color="@color/BlueBorder" android:width="5dp"/>
</shape>
</item>
Run Code Online (Sandbox Code Playgroud)
在 Android 版本 4.3、4.4.2 上,开关滑块在右侧和左侧像这样被剪切。
我尝试使用形状和开关的填充/边距/大小,到目前为止没有任何效果。
此外,使用适当的填充设置自定义轨道也不起作用。
在Android 5.0及更高版本上,通过设置解决了问题
android:paddingLeft
android:paddingRight
Run Code Online (Sandbox Code Playgroud)
为什么填充对于更高版本不起作用?我缺少什么?欢迎任何有关解决方案的提示!
我使用图像作为斜线屏幕的图片。
<style name="AppTheme.Launcher">
<item name="android:windowBackground">@drawable/splash_screen</item>
</style>
Run Code Online (Sandbox Code Playgroud)
然而,在一些不同的设备中,它被拉伸和扭曲。有没有办法像在 ImageView 中那样制作照片中心裁剪?
问题 我试图在活动中添加一个片段以及导航。但我看到以下错误
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app.myapp/com.app.myapp.HomeMainActivity}: android.view.InflateException: Binary XML file line #12: Binary XML file line #12: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988)
at android.app.ActivityThread.-wrap14(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Caused by: android.view.InflateException: Binary XML file line #12: Binary XML file line #12: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class fragment
Caused by: java.lang.IllegalArgumentException: Binary XML file line …Run Code Online (Sandbox Code Playgroud) android android-xml android-fragments android-jetpack androidx
我试过使用自定义样式,但它不起作用,它的默认颜色是灰色的,我希望它是白色的,有人能帮我吗?TIA
XML
<DatePicker
android:id="@+id/user_dob"
android:hapticFeedbackEnabled="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:calendarViewShown="false"
style="@style/MyDatePickerStyle"
android:datePickerMode="spinner"/>
styles
<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker" tools:targetApi="lollipop">
<item name="android:headerBackground">@color/white</item>
<item name="android:calendarTextColor">@color/white</item>
<item name="android:dayOfWeekBackground">@color/white</item>
<item name="android:yearListSelectorColor">@color/white</item>
<item name="android:datePickerMode">calendar</item>
<item name="android:minDate">01/01/1970</item>
</style>
Run Code Online (Sandbox Code Playgroud) 我目前正在创建一个应用程序,它有一个MaterialToolbar小部件。我想将图标颜色设置为白色。我尝试按照这个问题中接受的答案进行操作,但是,它不起作用。添加colorControlNormalstyles.xml 不起作用。
这是我的 MaterialToolbar xml 代码:
<com.google.android.material.appbar.MaterialToolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/topToolbar"
android:background="@color/colorPrimaryDark"
app:title="Revo"
app:titleTextColor="@android:color/white"
app:menu="@menu/menu_floatingsearchview"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
Run Code Online (Sandbox Code Playgroud)
我能做什么?
编辑、解决方案和说明
谢谢大家的好答案。我设法找到了一个解决方案,其中包括两个解决方案和另一个问题。
在这个问题中,被问到为什么colorControlNormal不起作用。接受的答案说,在向量行中,您必须更改给 的值android:fillColor,并将其替换为?attr/colorControlNormal。执行此技巧,项目 colorControlNormal,将控制所需的图标颜色。
在应用主样式中,您需要放置:
<item name="colorControlNormal">@android:color/white</item>
然后,在所需的图标中,您需要放置在path:
android:fillColor="?attr/colorControlNormal"
就是这样!现在图标将获得赋予 colorControlNormal 属性的颜色!
android android-xml android-theme android-toolbar material-components-android
是否可以在不传递参数的情况下使用 XML 中的默认参数调用 Kotlin 函数
这是我的视图模型:
class MyViewModel: ViewModel(){
fun doSomething(myVar: String = "defValue"){
}
}
Run Code Online (Sandbox Code Playgroud)
XML:
....
<data>
<variable
name="viewModel"
type="com.example.MyViewModel" />
</data>
....
android:onClick="@{(view) -> viewModel.doSomething()}" --> ERROR
android:onClick="@{(view) -> viewModel.doSomething(`SomeString`)}" --> WORKING
....
Run Code Online (Sandbox Code Playgroud)
当我使用数据绑定从 XML调用不带参数的doSomething方法时,出现错误。
[databinding] {"msg":"cannot find method doSomething() in class com.example.MyViewModel","file":"app\\src\\main\\res\\layout\\fragment_list.xml","pos":[{"line0":56,"col0":41,"line1":56,"col1":65}]}
Run Code Online (Sandbox Code Playgroud) 我有一个约束布局,其中包含一个 RecyclerView、一个 TextInputEditText、一个约束组(它处理 RecyclerView 和 TextInputEditText、一个 ImageView 和一个 LottieAnimationView 的可见性。
它是这样工作的:
在启动时,只有 LottieAnimation 可见,直到我的 LiveData 从 repo 获取数据并成功更新。
获取数据后,LottieView 被隐藏并显示 Group 可见性,后者依次显示 RecyclerView 和 TextInputEditText。
仅当出现错误时才会显示 ImageView,然后隐藏除 ImageView 之外的所有其他视图。
现在我希望当我滚动 RecyclerView 时,TextInputEditText 也会滚动。(由于滚动时分页滞后,我无法使用 NestedScrollView)。
我使用了 MotionLayout。除了它不能正常工作。我的能见度坏了。我的 Lottie 动画停留在屏幕上。我的布局是这样的:
片段.xml:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="ViewModel"
type="...AllServicesViewModel" />
<import type="android.view.View" />
</data>
<androidx.constraintlayout.motion.widget.MotionLayout
android:id="@+id/Root_All_Services"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutDescription="@xml/scene_all_services_header">
<ImageView
android:id="@+id/Illus_Error"
android:layout_width="350dp"
android:layout_height="350dp"
android:layout_margin="16dp"
android:contentDescription="@string/icd_error_services_unavailable"
android:scaleType="centerCrop"
android:src="@drawable/il_error"
android:visibility="@{ViewModel.message != null ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/il_error" …Run Code Online (Sandbox Code Playgroud) android android-xml kotlin android-constraintlayout android-motionlayout
有没有人知道使用sp单位作为布局尺寸的任何问题?所以,假设我有一个16sp文本,将TextView高度设置20sp为例如有什么问题,所以它会随着文本缩放?
<TextView
android:textSize="16sp"
android:layout_width="match_parent"
android:layout_height="20sp"
...
Run Code Online (Sandbox Code Playgroud)
这样,文本周围的填充在缩放后与文本大小成比例。此外,这对于自动调整大小很有用,wrap_content不推荐使用。
但是,官方文档指出sp永远不应用于文本大小(尽管没有任何解释):
但是,在定义文本大小时,您应该改为使用可缩放像素 (sp) 作为单位(但切勿将 sp 用于布局大小)。
这背后的原因是什么?两个dpS和sps的转换为某设备特定的像素量,最终,不是吗?那么核心区别是什么?
android ×10
android-xml ×10
kotlin ×2
androidx ×1
material-components-android ×1
sax ×1
saxparser ×1
string ×1