【问题标题】:How to create Android UI library如何创建 Android UI 库
【发布时间】:2021-02-08 20:02:17
【问题描述】:

我有很多 UI 实用程序代码,并想为每个代码创建一个 android 库。根据我的所有研究,我做了以下事情。

  • 文件 -> 新模块。创建一个android库

  • 在 build.gradle 文件中实现库implementation project(':app:FirstLibrary')

  • 库中的 Kotlin 和 xml 文件如下

FirstLib.kt

class FirstLib(mContext: Context) : Activity() {
    private var mContext: Context? = null
    private var view: View? = null

    fun s(message: String?) {
        layoutInflater.inflate(R.layout.first_lib_view, null)
        Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show()
    }
}
first_lib_view.xml 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Om Namah Shivaya"
        android:textSize="16sp" />

</LinearLayout>
  • 接下来,我尝试在主 xml 文件中访问此 UI 库,如下所示
<com.example.firstlibrary.FirstLib
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools="ajkdfbj"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

现在我什么也得不到。连吐司消息都没有。

如何在 Android 中创建 UI 库并使用它。我有自己的自定义视频播放器、音频播放器、图像渐变视图等。我现在需要制作所有这些库。感谢阅读

【问题讨论】:

  • 你好,我认为你的主要问题是你试图在 xml 级别添加活动。从Fragment 继承你的课程或以通常的方式开始活动
  • @AlexanderDadukin 任何 kotlin 教程?我不是高级开发人员,只是新手。请显示一些带有解释的代码。
  • 是的,当然)但是你想要达到什么目的?
  • @AlexanderDadukin 我有自定义 exoplayer,我通过手势添加了音量和亮度控制。现在我想把它做成一个单独的库。
  • 而且这个 ui 是一个单独的窗口,不是吗?

标签: java android kotlin android-library


【解决方案1】:

要实现自定义视图元素,您需要像以前一样将类放入单独的模块中,并从视图继承自定义视图。

  • 也就是说,如果它是一个自定义视图,并且您希望在 xml 文件中使用它,那么您应该创建类似:
MyCustomView @JvmOverloads constructor(
    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
): View {

// you should override onMeasure, onLayout, onDraw here as it marked as abstract afaik

// and implement your logic

}

并实现整个onMeasureonLayoutonDraw 逻辑。

  • 如果您想扩展现有视图逻辑,则只需从现有视图逻辑继承它并孵化行为即可。
MyCustomView @JvmOverloads constructor(
    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
): TextView() {

... your logic goes here...

} 

您确实实现了自定义活动,但将其用作视图,因此,这就是它不适合您的原因

PS:here你可以了解更多关于自定义视图组件的信息

【讨论】:

  • 现在,如何在main_activity.xml使用它?
  • 和以前一样
  • 你可以在 xml 中声明自定义视图?
  • 子类视图,而不是 Activity。
  • 这个答案中的例子直接继承了View,但是你必须实现所有复杂的测量和绘图逻辑。在绝大多数情况下,您应该将现有布局子类化,例如 FrameLayout 或 RelativeLayout。或者,如果您只是修改像 TextView 这样的单个视图的行为,那么您可以直接对其进行子类化。
猜你喜欢
  • 2017-06-14
  • 2015-06-22
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多