布局定义用户界面的可视结构,例如活动,片段或应用程序窗口小部件的UI。
为什么在TableLayout中动态添加的TableRow在Android Kotlin中无法访问?
我有一个空的TableLayout,其标题在activity_main.xml中,如下所示 我有一个空的 TableLayout,其标题位于 Activity_main.xml 中,如下 <TableLayout android:id="@+id/sensorTable" android:layout_width="0dp" android:layout_height="0dp" android:scrollbarAlwaysDrawVerticalTrack="true" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/lineChart"> <TableRow> <TextView android:layout_width="75dp" android:layout_column="0" android:layout_weight="1" android:text="Id" android:textSize="20sp" android:textStyle="bold" /> <TextView android:layout_width="75dp" android:layout_column="0" android:layout_weight="1" android:text="Sensor" android:textSize="20sp" android:textStyle="bold" /> <TextView android:layout_width="75dp" android:layout_column="1" android:layout_weight="1" android:text="Reading" android:textSize="20sp" android:textStyle="bold"></TextView> </TableRow> </TableLayout> 然后,我以编程方式在 MainActivity.kt 中添加表行,如下所示。 val stableLayout = findViewById<TableLayout>(R.id.sensorTable) var scout: Int = 0 while (scout<ccsen1.count()){ val tableRow = LayoutInflater.from(this).inflate(R.layout.table_item, null, false) val idauto = tableRow.findViewById<View>(R.id.idautoint) as TextView val Sensor = tableRow.findViewById<View>(R.id.sensor) as TextView val Reading = tableRow.findViewById<View>(R.id.reading) as TextView idauto.setText((ccsen1.elementAt(scout)).sidauto) Sensor.setText((ccsen1.elementAt(scout)).sname) Reading.setText((ccsen1.elementAt(scout)).sreading) stableLayout.addView(tableRow) scout++ } 然后,我尝试在另一个函数中按如下方式访问表行,但应用程序崩溃了。它仅显示在 XML 文件中定义的 TableLayout 的标题,如上所示(id、传感器、读数)。一旦 while 循环递增到下一个表行,应用程序就会崩溃,就好像没有更多的表行可找到一样。但是,stableLayout.childCount 返回 3 行。因此,val t = stableLayout.getChildAt(index:1) as TableRow 失败并使应用程序崩溃。 val RowCount = stableLayout.childCount var scout3: Int = 0 while (scout3<RowCount) { val t = stableLayout.getChildAt(scout3) as TableRow //TextView firstTextView = (TextView) t.getChildAt(0); val firstTextView = t.getChildAt(0) as TextView //TextView secondTextView = (TextView) t.getChildAt(1); val secondTextView = t.getChildAt(1) as TextView //TextView secondTextView = (TextView) t.getChildAt(2); val thirdTextView = t.getChildAt(2) as TextView //String firstText = firstTextView.getText().toString(); val firstText = firstTextView.text.toString() //String secondText = secondTextView.getText().toString(); val secondText = secondTextView.text.toString() //String secondText = secondTextView.getText().toString(); val thirdText = thirdTextView.text.toString() Toast.makeText(this@MainActivity, "$firstText-$secondText-$thirdText", Toast.LENGTH_SHORT).show() scout3++ } 这是为什么?我该如何解决这个问题?我是不是错过了什么? 2024-12-18 13:19:58.221 7183-7183/com.example.installedapps E/e.installedapp: Attempt to load writable dex file: /data/data/com.example.installedapps/code_cache/.overlay/base.apk/classes3.dex 2024-12-18 13:19:58.558 7183-7217/com.example.installedapps E/QT: [QT]file does not exist 2024-12-18 13:19:59.478 7183-7222/com.example.installedapps E/ion: ioctl c0044901 failed with code -1: Invalid argument 2024-12-18 13:20:17.902 7183-7183/com.example.installedapps E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.installedapps, PID: 7183 java.lang.ClassCastException: androidx.constraintlayout.widget.ConstraintLayout cannot be cast to android.widget.TableRow at com.example.installedapps.MainActivity.createButtonDynamically$lambda-4(MainActivity.kt:173) at com.example.installedapps.MainActivity.$r8$lambda$WmSUg8-J-d8vkkGFbIzKlnN5bls(Unknown Source:0) at com.example.installedapps.MainActivity$$ExternalSyntheticLambda0.onClick(Unknown Source:2) at android.view.View.performClick(View.java:7792) at android.widget.TextView.performClick(TextView.java:16112) at android.view.View.performClickInternal(View.java:7769) at android.view.View.access$3800(View.java:910) at android.view.View$PerformClick.run(View.java:30218) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:226) at android.os.Looper.loop(Looper.java:313) at android.app.ActivityThread.main(ActivityThread.java:8751) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135) 您不应该使用 LinearLayout 或 ConstraintLayout,table_item.xml 中的顶部元素应该是 TableRow。 LinearLayout 可以像 TableRow 扩展 LinearLayout 一样工作,但是表格列对齐和调整大小功能将不起作用。 但是当您将 layout_width 硬编码为固定值时,它看起来会对齐(直到一列占用超过 75dp) 如果你查看 TableRow 的文档,它会说 TableRow 的子级不需要在 XML 文件中指定layout_width 和layout_height 属性。 TableRow 始终强制这些值分别为 ViewGroup.LayoutParams.MATCH_PARENT 和 ViewGroup.LayoutParams.WRAP_CONTENT 当您固定 TextView 的宽度时,您也可以先使用垂直布局,然后再使用水平布局,而不需要额外的 TableLayout 成本。 要正确使用TableLayout activity_main.xml应该是 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.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"> <TableLayout android:id="@+id/sensorTable" android:layout_width="0dp" android:layout_height="0dp" android:scrollbarAlwaysDrawVerticalTrack="true" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/lineChart"> <TableRow> <TextView android:layout_column="0" android:layout_weight="1" android:text="Id" android:textSize="20sp" android:textStyle="bold" /> <TextView android:layout_column="0" android:layout_weight="1" android:text="Sensor" android:textSize="20sp" android:textStyle="bold" /> <TextView android:layout_column="1" android:layout_weight="1" android:text="Reading" android:textSize="20sp" android:textStyle="bold"/> </TableRow> </TableLayout> </androidx.constraintlayout.widget.ConstraintLayout> 和table_item.xml <TableRow> <TextView android:layout_column="0" android:layout_weight="1" android:textSize="20sp" /> <TextView android:layout_column="0" android:layout_weight="1" android:textSize="20sp" /> <TextView android:layout_column="1" android:layout_weight="1" android:textSize="20sp" /> </TableRow> 这将允许 TableLayout 的主要功能(根据列的最大宽度自动对齐列)发挥作用。 你现在的方式TableLayout只是充当另一个浪费的LinearLayout
如何解决android element/attribute is not allowed here错误?
我是初学者,正在学习Android开发。我在 Windows 8.1 上使用 Android Studio 版本 4.1.1。 我正在制作一个单屏生日快乐卡应用程序。当我打开activity_main.xml时
我的活动中有一个简单的 ViewPager2。 就像这个: 我的活动中有一个简单的 ViewPager2。 喜欢这个: <androidx.viewpager2.widget.ViewPager2 android:id="@+id/balanceProfilPager" android:layout_width="match_parent" android:layout_height="0dp" android:orientation="horizontal" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> 我需要在屏幕顶部添加点指示器,但我没有找到示例。 我不知道我该怎么做。 我需要的样本 非常感谢您的帮助 使用此库进行此集成: https://github.com/smarteist/Android-Image-Slider 如果您想创建自定义气泡,请更改 viewPager 页面侦听器中的颜色 您现在可以使用页面指示器。请参阅页面指示器 |穿 您还可以检查有关如何自定义页面指示器旋转的问题:Android:Jetpack Compose:为 HorizontalPageIndicators 创建自定义 PageIndicatorsStyle
如何让 ConstraintLayout Flow 小部件包装“包含”视图,并且视图也占用剩余空间?
我正在尝试使用 Flow 小部件来替换我刚刚在 ConstraintLayout 内部使用的垂直方向 LinearLayout。它需要满足以下所有条件: “包含&q...
如何让“登录”标题垂直居中? 这是风格: <item name="android:textColor">@android:</desc> <question vote="0"> <p>如何将“登录”标题垂直居中?</p> <p><img src="https://cdn.txt58.com/i/AWkuc3N0YXRpYy5uZXQvdEFwNXEucG5n" width="350"/></p> <p>这就是风格:</p> <pre><code><style name="ABGAlertDialog" parent="@android:style/Theme.DeviceDefault.Dialog"> <item name="android:textColor">@android:color/black</item> <item name="android:textColorHint">@android:color/darker_gray</item> <item name="android:background">@color/corporativo_red</item> <item name="android:windowTitleStyle">@style/MyAlertDialogTitle</item> </style> <style name="MyAlertDialogTitle"> <item name="android:background">@color/corporativo_red</item> <item name="android:colorBackground">@color/corporativo_red</item> <item name="android:textColor">@android:color/white</item> <item name="android:textStyle">bold</item> <item name="android:maxLines">1</item> <item name="android:textSize">20sp</item> <item name="android:bottomOffset">5sp</item> </style> </code></pre> <p>我尝试过<pre><code>gravity</code></pre>、<pre><code>textAlignment</code></pre>和其他一些项目,但没有结果。</p> </question> <answer tick="false" vote="1"> <p>您无法将普通警报对话框的标题居中。您将需要创建一个自定义对话框,最好使用对话框片段或对话框活动,具体取决于您需要的功能。</p> </answer> <answer tick="false" vote="0"> <p>在 android:textAppearance 中设置文本样式</p> <pre><code><style name="MyAlertDialogTitle"> <item name="android:background">@color/corporativo_red</item> <item name="android:colorBackground">@color/corporativo_red</item> <item name="android:bottomOffset">5sp</item> <item name="android:textAppearance">@style/YourTextStyle</item> </style> </code></pre> <p><a href="https://stackoverflow.com/questions/18624091/change-both-text-and-background-color-in-title-bar-android">更改标题栏中的文本和背景颜色(Android)?</a><br/> <a href="https://stackoverflow.com/questions/14492341/textview-using-the-dialog-title-style-androidstyle-textappearance-dialogwind">Textview:使用对话框标题样式:@android:style/TextAppearance.DialogWindowTitle</a></p> </answer> <answer tick="false" vote="0"> <p>如果警报对话框在没有任何自定义布局或主题的情况下正常,那么您可以通过传递 id 和 android 命名空间来获取对象</p> <pre><code>AlertDialog.Builder alertDialogBuild = new AlertDialog.Builder(getActivity()); alertDialogBuild.setMessage("message text align center"); alertDialogBuild.setTitle("Title text Align Center"); alertDialogBuild.setPositiveButton("Okay", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); AlertDialog dialog = alertDialogBuild.show(); TextView title = (TextView) dialog.findViewById(getActivity().getResources().getIdentifier("alertTitle", "id", "android")); title.setGravity(Gravity.CENTER); TextView message = (TextView) dialog.findViewById(getActivity().getResources().getIdentifier("message", "id", "android")); message.setGravity(Gravity.CENTER); </code></pre> </answer> <answer tick="false" vote="0"> <pre><code>static void centerTitleHorizontally(final TextView title) { ViewTreeObserver vto = title.getViewTreeObserver(); vto.addOnGlobalLayoutListener (new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { try { title.getViewTreeObserver().removeOnGlobalLayoutListener(this); } catch (NoSuchMethodError x) { title.getViewTreeObserver().removeGlobalOnLayoutListener(this); } Rect bounds = new Rect(); title.getPaint().getTextBounds(title.getText().toString(), 0, title.getText().length(), bounds); title.setPadding((title.getWidth() - bounds.width()) / 2, 0, 0, 0); } }); } </code></pre> </answer> <answer tick="false" vote="0"> <p>添加<pre><code><item name="android:gravity">center</item></code></pre>对我有用。</p> </answer> </body></html>
我是一名自由职业者,致力于解决 Android 应用程序的崩溃问题。它发生在启动时,我知道这是因为 Activity_main.xml。它有太多的视图、太多的嵌套级别。除此之外(我想...
作为我刚接触 Android 开发,我只是想知道有没有办法为不同的屏幕尺寸开发 Android 应用程序? 帮我。 先谢谢你了
我的布局文件未显示在 setContent(R.layout.xml 文件)中..?
我已经编写了我的代码,但是在代码中,当我使用 view = ..(R.layout.my_message) 时,它显示错误,因为这样的文件在创建时不存在。再次重写名字时,我可以选择
如何以编程方式在 ConstraintLayout 底部和其他内容下方添加广告视图?
这个问题可能与以下问题类似,但我需要帮助解决我的用例。它提供了在 XML 文件内添加约束的说明。 我正在尝试从
我尝试使用此库添加弹跳点加载 com.wang.avi:库:2.1.3 但观点总是在“左” 这是我的 xml 代码 我尝试使用此库添加弹跳点加载 com.wang.avi:库:2.1.3 但是视图总是在“左边” 这是我的xml代码 <LinearLayout android:id="@+id/linear7" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal|center_vertical" android:orientation="vertical" android:layout_gravity="center_horizontal|center_vertical"> <com.wang.avi.AVLoadingIndicatorView android:id="@+id/here" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="8dp" android:gravity="center_horizontal|center_vertical" android:orientation="horizontal" app:indicatorName="BallPulseIndicator" app:indicatorColor="#FF9800"/> </LinearLayout> 试试这个。它应该有效: <LinearLayout android:id="@+id/linear7" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" android:layout_gravity="center_horizontal|center_vertical"> <com.wang.avi.AVLoadingIndicatorView android:id="@+id/here" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="8dp" android:gravity="center_horizontal|center_vertical" android:orientation="horizontal" app:indicatorName="BallPulseIndicator" app:indicatorColor="#FF9800"/> </LinearLayout> 您还可以将整个内容放入 RelativeLayout 中并设置 android:layout_centerInParent="true" 您可以使用线性布局或相对布局,只要您方便。 使用添加以下行进行线性布局, <LinearLayout android:id="@+id/linear7" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal|center_vertical|start" android:orientation="vertical" android:layout_gravity="center_horizontal|center_vertical"> <ImageView android:id="@+id/here" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="8dp" android:src="@drawable/ic_launcher_background" android:gravity="center_horizontal|center_vertical|start" android:orientation="horizontal"/> </LinearLayout> 对于相对布局只需添加以下代码: <RelativeLayout android:id="@+id/linear7" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:orientation="vertical" android:layout_gravity="center_horizontal|center_vertical"> <ImageView android:id="@+id/here" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="8dp" android:src="@drawable/ic_launcher_background" android:layout_alignParentStart="true" android:orientation="horizontal"/> </RelativeLayout> 谢谢 为此,我认为最好将 RelativeLayout 与 layout_centerInParent 一起使用,如下所示: <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <com.wang.avi.AVLoadingIndicatorView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:gravity="center_horizontal|center_vertical" android:orientation="horizontal" app:indicatorName="BallPulseIndicator" app:indicatorColor="#FF9800"/> </RelativeLayout> 但是对于LinearLayout,我认为你的问题可以通过设置AVLoadingIndicatorView布局width和height"wrap_content"或const值来解决。 依赖不可用 implementation 'com.wang.avi:library:2.1.3' 但是,这个 fork 正在工作,一个库已添加到 Maven 中央存储库中: implementation 'io.github.maitrungduc1410:AVLoadingIndicatorView:2.1.4' 请参阅 AVLoadingIndicator 问题文档此处。
当我从 android studio 新项目模板中获取底部导航示例时,视图非常完美。 但是,如果我使用“空视图活动”创建新项目并手动实现底部导航,则 v...
我正在尝试对齐 LinearLayout 的垂直中心,如下图所示(天色边框)以删除按钮的垂直中心。 所以我将 id:groupNumbers 的重力设置为 center_vertical。 但没有
我有一个应用程序,在我的手机设备上运行时可以完美运行。但是,在模拟器上运行时会崩溃。 2021-01-11 06:58:24.719 19783-19783/com.example.myapplication E/RecyclerView:无适配器
如何在应用程序中拥有灵活的帖子创建功能,就像我们在 Twitter 等社交媒体应用程序中那样,能够自由添加文本、图像、位置,而无需同时添加它们......
将收到的电子邮件保存为文件,然后阅读它们(android 和 javamail)
我正在开发一个android项目,可以从任何gmail帐户读取电子邮件,我想做的是从收件箱接收已读或未读的邮件,然后将它们存储为文件。我的目标是......
我目前正在尝试为 Android 应用程序实现边缘到边缘,并使用本指南成功完成了它(https://developer.android.com/training/gestures/edge-to-edge#lay-完全出-
FrameLayout 与 NestedScrollView 的高度不匹配
我在 NestedScrollView 中有一个 FrameLayout,如 我在 NestedScrollView 中有一个 FrameLayout,如 <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#000000"> 但是 FrameLayout 没有填充 NestedScrollView 的高度。我该如何解决这个问题? 检查此解决方案 使用fillViewport="true" 如果需要,此属性会导致滚动视图的子视图扩展到 ScrollView 的高度。当child高于ScrollView时,该属性不起作用。 <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" app:layout_behavior="@string/appbar_scrolling_view_behavior"> 更新 此解决方案也适用于 androidx.coordinatorlayout.widget.CoordinatorLayout 和 androidx.core.widget.NestedScrollView。
Android Lollipop CardView 上的波纹效果
我试图通过在活动 XML 文件中设置 android:backgound 属性来让 CardView 在触摸时显示涟漪效果,如 Android 开发人员页面上所述,但它...
Android Material TextInputLayout 错误消息显示在 Material TextInputEditText 子项后面
我目前正在使用 Material 组件创建 Android UI。 在我的活动中,我使用 com.google.android.material.textfield.TextInputLayout 组件的错误功能。 问题是如果...
我知道应用程序可以通过活动清单中的标签进行全屏 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 是否可以从内部切换到全屏模式.. .