gpt4 book ai didi

android - 自定义 View 中的 View 未膨胀

转载 作者:行者123 更新时间:2023-11-29 22:35:56 25 4
gpt4 key购买 nike

我有一个音量屏幕,我希望用户能够从应用中的任何地方充气。

class VolumeScreen @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : RelativeLayout(context, attrs, defStyleAttr) {

private var audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager

fun inflate(context: Context) {

LayoutInflater
.from(context)
.inflate(R.layout.screen_volume, this, true)

initUI()

}

fun hide() {

this.visibility = View.GONE

}

private fun initUI() {

this.visibility = View.VISIBLE

TTSUtils.getInstance(context).speakText(resources.getString(R.string.volume_help))

val audioStream = AudioManager.STREAM_SYSTEM

var currentVolume = audioManager.getStreamVolume(audioStream)

val maxVolume = audioManager.getStreamMaxVolume(audioStream)

volumeLevelText.text = resources.getString(R.string.volume_percentage, currentVolume.times(10).toString())

increaseButton.setOnClickListener {

if (currentVolume < 10) {
currentVolume += 1
}

audioManager.setStreamVolume(audioStream, currentVolume, 0)

volumeLevelText.text = resources.getString(R.string.volume_percentage, currentVolume.times(10).toString())

}

decreaseButton.setOnClickListener {

if (currentVolume > 0) {
currentVolume -= 1
}

audioManager.setStreamVolume(audioStream, currentVolume, 0)


volumeLevelText.text = resources.getString(R.string.volume_percentage, currentVolume.times(10).toString())

}
volumeContinueButton.setOnClickListener {
this.hide()
}
}
}

.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<RelativeLayout android:layout_width="768px"
android:layout_height="840px"
android:background="@color/main_background">

<TextView
android:text="@string/volume"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="78px"
android:textAppearance="@style/ScreenTitle"/>
<TextView
android:text="@string/adjust_volume"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="220px"
android:textAppearance="@style/ScreenSubtitle"/>


<TextView
android:text="@string/volume_percentage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="350px"
android:textAppearance="@style/Amount"
android:id="@+id/volumeLevelText"/>


<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginBottom="171px"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true">

<ImageView
android:src="@drawable/connector_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
/>

<Button android:layout_width="348px"
android:layout_height="104px"
android:text="@string/decrease_volume"
android:gravity="left|center_vertical"
android:textAppearance="@style/SelectionButtonText"
android:background="@drawable/button_background_coral"
android:drawableRight="@drawable/ic_remove_81dp"
android:paddingRight="29px"
android:paddingLeft="30px"
android:id="@+id/decreaseButton"
/>

</LinearLayout>

<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginBottom="171px"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true">



<Button android:layout_width="348px"
android:layout_height="104px"
android:text="@string/increase_volume"
android:gravity="left|center_vertical"
android:textAppearance="@style/SelectionButtonText"
android:background="@drawable/button_background_coral"
android:drawableRight="@drawable/ic_add_81px"
android:paddingRight="29px"
android:paddingLeft="30px"
android:id="@+id/increaseButton"
/>

<ImageView
android:src="@drawable/connector_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
/>


</LinearLayout>


<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginBottom="31px"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true">



<Button android:layout_width="348px"
android:layout_height="104px"
android:text="@string/cont"
android:textAppearance="@style/SelectionButtonText"
android:background="@drawable/button_background_olive"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:id="@+id/volumeContinueButton"
/>

<ImageView
android:src="@drawable/connector_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
/>


</LinearLayout>

在 Activity 的 .xml 中:

   <group.flowbird.indygotvm.views.VolumeScreen
android:id="@+id/volumeScreen"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="80px"
android:layout_marginBottom="104px"
android:elevation="1px"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent">

</group.flowbird.indygotvm.views.VolumeScreen>

第一次调用 inflate() 时, View 根据 initUI() 中的代码更新。但是如果它在调用 hide() 之后重新膨胀,则不会发生任何事情,即使再次调用 initUI() 也是如此。每次调用 inflate() 时如何确保 View 被重新渲染或分配给它的 onClickListener()?

最佳答案

这个 View 永远不会膨胀,因为 init 方法什么都不做。尝试使用 init Kotlin 构造函数来扩充 View 并初始化 UI:

init {
LayoutInflater
.from(context)
.inflate(R.layout.screen_volume, this, true)

initUI()
}

使用前面的代码,当 Activity 调用 setContentView 方法时, View 会膨胀,包括您的自定义 View 。

在 inflate() 方法中使用构造函数上下文删除上下文参数。但是,如果您不需要以编程方式扩充此 View ,则不需要此方法。

关于android - 自定义 View 中的 View 未膨胀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59506309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com