标签: android-xml

使用 Sax 解析错误 XML 时如何忽略 XML 错误(在 Android 上)

关于 Android 上使用 Java 的 Sax XML 解析器的问题:我需要解析从 Web 获取的 XML 文件,但我无法控制该文件。有些包含错误并导致解析器因“标签不匹配”或“格式不正确(无效标记)”等错误而中止。

这些错误对我来说并不重要,我想忽略它们并继续前进,我可以处理损坏的 XML 结构。但我无法修复 XML 文件,它们不是我的。我如何告诉 Android 上的 Sax(类 org.xml.sax.XMLReader)不要抛出异常并继续运行?附加 ErrorHandler 不起作用,捕获异常也没有用,因为我无法在停止的地方继续解析。

我的 XML 不是 HTML,但这里有一些 (X)HTML 示例,浏览器会忽略错误并继续运行。我也想做这个。

  • 即使标签从未关闭,浏览器也可以使用“ <br> ”而不是“ <br/> ”。
  • 即使结束标记的顺序错误,“ <b><i> text </b></i> ”也能正常工作。
  • 尽管令牌无效,“ odds &ends ”仍被接受,“ odds&ends ”将是正确的。

我不想编写自己的解析器来处理字符集转换等。我不需要验证 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)

谢谢!

android sax saxparser saxparseexception android-xml

5
推荐指数
1
解决办法
3652
查看次数

Android:不同语言的“字符串数组”,放入“Assets”还是“strings.xml”?

我想知道放置以下字符串资源的最佳位置。我想创建一个位置过滤框,用户可以根据“地区”、“地铁站”、“地标”等至少 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”文件夹等。

在此输入图像描述

string android android-xml

5
推荐指数
1
解决办法
3061
查看次数

Android 自定义 Switch 被剪裁/切断

我有一个自定义的 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)

为什么填充对于更高版本不起作用?我缺少什么?欢迎任何有关解决方案的提示!

android android-xml android-switch

5
推荐指数
1
解决办法
1946
查看次数

在启动画面中心裁剪中制作背景图像

我使用图像作为斜线屏幕的图片。

<style name="AppTheme.Launcher">
        <item name="android:windowBackground">@drawable/splash_screen</item>
</style>
Run Code Online (Sandbox Code Playgroud)

然而,在一些不同的设备中,它被拉伸和扭曲。有没有办法像在 ImageView 中那样制作照片中心裁剪?

android android-xml android-theme

5
推荐指数
1
解决办法
5466
查看次数

重复的 id,标签为 null,另一个片段用于 androidx.navigation.fragment.NavHostFragment

问题 我试图在活动中添加一个片段以及导航。但我看到以下错误

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

5
推荐指数
1
解决办法
751
查看次数

在android中的微调模式下更改日期选择器文本颜色?

我试过使用自定义样式,但它不起作用,它的默认颜色是灰色的,我希望它是白色的,有人能帮我吗?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)

android android-datepicker android-layout android-xml

5
推荐指数
1
解决办法
976
查看次数

android - 更改 MaterialToolbar 菜单项图标颜色

我目前正在创建一个应用程序,它有一个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

5
推荐指数
1
解决办法
2971
查看次数

如何在数据绑定中不将参数传递给具有默认值的参数

是否可以在不传递参数的情况下使用 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)

android android-xml kotlin android-databinding

5
推荐指数
1
解决办法
996
查看次数

MotionLayout 组可见性问题

我有一个约束布局,其中包含一个 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

5
推荐指数
1
解决办法
345
查看次数

我可以为布局尺寸使用可缩放像素吗?

有没有人知道使用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 android-layout android-xml android-xml-attribute

5
推荐指数
1
解决办法
217
查看次数