android ConstraintLayoutState-如何获取对ConstraintLayoutState对象的引用?
我很简短地讲述了这一点,我想根据一些行动引发不同的观点。但我甚至找不到美国的参考资料。让我向您展示我目前所拥有的:android ConstraintLayoutState-如何获取对ConstraintLayoutState对象的引用?,android,android-constraintlayout,Android,Android Constraintlayout,我很简短地讲述了这一点,我想根据一些行动引发不同的观点。但我甚至找不到美国的参考资料。让我向您展示我目前所拥有的: class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main_activity) stateCons
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
stateConstraintLayout.loadLayoutDescription(R.xml.main_states_layout)
myButton.setOnClickListener {
stateConstraintLayout.setState(R.id.start, 110, 3000)
}
}
依赖项:实现'com.android.support.constraint:constraint布局:2.0.0-alpha2'
我有一个我正在加载的初始文件,其中包含布局状态。看起来是这样的:
<?xml version="1.0" encoding="utf-8"?>
<ConstraintLayoutStates
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<State
android:id="@+id/start"
app:constraints="@layout/start_layout"/>
<State
android:id="@+id/loading"
app:constraints="@layout/loading_layout"/>
</ConstraintLayoutStates>
main_states_layout.xml:
//在这里,我想要的是当点击按钮时视图发生变化
让我们看看main_activity.xml的内容:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/stateConstraintLayout"
>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/myButton"
android:text="press me" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintEnd_toEndOf="parent"/>
</android.support.constraint.ConstraintLayout>
xml res文件夹中的主_states_布局如下所示:
<?xml version="1.0" encoding="utf-8"?>
<ConstraintLayoutStates
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<State
android:id="@+id/start"
app:constraints="@layout/start_layout"/>
<State
android:id="@+id/loading"
app:constraints="@layout/loading_layout"/>
</ConstraintLayoutStates>
并且start_布局仅显示绿色背景的文本(但从未显示):
单击按钮时,会看到在onclicklistener中调用的代码没有更新,为什么?
loadLayoutDescription()
在Rebecca的例子中,她可能使用Kotlin合成访问器来访问名为stateConstraintLayout
的ConstraintLayout
。您可以将其替换为对所需的ConstraintLayout
的引用。简单地说,您应该创建自己的ConstraintLayout对象
ConstraintLayout constraintlayout = new ConstraintLayout
然后,您可以使用对象访问方法,如loadLayoutDescription。首先,您需要检查您的导入
import kotlinx.android.synthetic.main.main_activity.*
之后,您需要在布局中使用相同的小部件,如下所示
main activity.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/stateConstraintLayout"
>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/myButton"
android:text="press me" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintEnd_toEndOf="parent"
android:visiblity="visible"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visiblity="gone"
android:text="My started layout"
android:textSize="21sp"
android:textColor="@android:color/holo_orange_light"
android:id="@+id/appCompatTextView"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"/>
</android.support.constraint.ConstraintLayout>
start_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/stateConstraintLayout"
>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/myButton"
android:text="press me" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintEnd_toEndOf="parent"
android:visiblity="gone"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visiblity="visible"
android:text="My started layout"
android:textSize="21sp"
android:textColor="@android:color/holo_orange_light"
android:id="@+id/appCompatTextView"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"/>
</android.support.constraint.ConstraintLayout>
您找到问题的答案了吗?我也在努力解决这个问题——甚至无法访问xml文件中的状态。我仍然无法获取它。一旦有人解决了问题,请发布答案
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/stateConstraintLayout"
>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/myButton"
android:text="press me" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintEnd_toEndOf="parent"
android:visiblity="gone"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visiblity="visible"
android:text="My started layout"
android:textSize="21sp"
android:textColor="@android:color/holo_orange_light"
android:id="@+id/appCompatTextView"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"/>
</android.support.constraint.ConstraintLayout>