#author("2025-04-10T21:19:33+08:00","default:Admin","Admin") #author("2025-04-10T22:41:28+08:00","default:Admin","Admin") [[Android]] &color(red){※前提条件:本情報はAndroid Studio 2024.1.1を基づいて説明してる}; #contents * 概要 [#f0d29740] ConstraintLayout (约束布局)的好处太多了,现在Android Studio新的版本默认就是 ConstraintLayout ** &color(red){创建约束布局的规则}; [#gb0895b1] - 每个视图都必须至少有两个约束条件:一个水平约束条件,一个垂直约束条件(不进行水平或者垂直约束的话,默认显示到0,0位置也就是左上角) - 只能在共用同一平面的约束手柄与定位点之间创建约束条件。因此,视图的垂直平面(左侧和右侧)只能约束在另一个垂直平面上;而基准线则只能约束到其他基准线上。 (简单说视图顶部/底部只能约束顶部或底部,左侧/右侧只能约束左侧或右侧) -每个约束句柄只能用于一个约束条件,但您可以在同一定位点上创建多个约束条件(从不同的视图),也就是说出发只能一个而到达目的地可以多个 * 布局 [#k7f7a6ab] ** 相对布局 [#h77dc2b7] |layout_constraintLeft_toLeftOf|layout_constraintStart_toStartOf|left一定是左边,而start不一定 &br; 我们的习惯是start从左往右,&br; 而某些国家是start从右往左。这个开始方向是跟系统语言有关系的。| |layout_constraintLeft_toRightOf|layout_constraintStart_toEndOf|~| |layout_constraintRight_toRightOf|layout_constraintEnd_toEndOf|| |layout_constraintRight_toLeftOf|layout_constraintEnd_toStartOf|| |layout_constraintTop_toTopOf||| |layout_constraintTop_toBottomOf||| |layout_constraintBottom_toTopOf||| |layout_constraintBottom_toBottomOf||| |layout_constraintBaseline_toBaselineOf||| ** 角度定位 [#c434b85c] #codeprettify{{ //围绕的目标 layout_constraintCircle //距离 layout_constraintCircleRadius //角度 layout_constraintCircleAngle }} ** 绝对布局 [#c54a4e98] #codeprettify{{ layout_editor_absoluteX layout_editor_absoluteY }} ** 偏移 [#s69d189a] bias就是偏移的意思 水平偏移和垂直偏移 #codeprettify{{ layout_constraintHorizontal_bias layout_constraintVertical_bias }} ** 宽高比 [#l8bc0a0f] #codeprettify{{ layout_constraintDimensionRatio }} * Troubleshooting [#bd4ce315] 下面的错误的可能性 - 如果控件的约束设置的不对,有可能控件之间会互相影响。 - 尽量不要对UI进行多层嵌套。 - 其他的线程里面对UI进行的更新时,一定像下面一样使用runOnUiThread #codeprettify{{ Activity.runOnUiThread(new Runnable() { @Override public void run() { //UI的更新 } }); }} #codeprettify{{ FATAL EXCEPTION: main Process: com.sengxiaonong.fpvcar, PID: 1757 java.lang.IllegalStateException: View with id 16908290: androidx.appcompat.widget.ContentFrameLayout#onMeasure() did not set the measured dimension by calling setMeasuredDimension() at android.view.View.measure(View.java:26512) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1608) at android.widget.LinearLayout.measureVertical(LinearLayout.java:878) at android.widget.LinearLayout.onMeasure(LinearLayout.java:721) at android.view.View.measure(View.java:26496) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure(View.java:26496) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1608) at android.widget.LinearLayout.measureVertical(LinearLayout.java:878) at android.widget.LinearLayout.onMeasure(LinearLayout.java:721) at android.view.View.measure(View.java:26496) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at com.android.internal.policy.DecorView.onMeasure(DecorView.java:760) at android.view.View.measure(View.java:26496) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:4042) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:2658) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2964) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2371) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9297) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1231) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1239) at android.view.Choreographer.doCallbacks(Choreographer.java:899) at android.view.Choreographer.doFrame(Choreographer.java:832) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1214) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7924) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) 2025-04-10 21:43:40.960 1757-1757 Process com.sengxiaonong.fpvcar I Sending signal. PID: 1757 SIG: 9 }} #hr(); コメント: #comment_kcaptcha