布局定义用户界面的可视结构,例如活动,片段或应用程序窗口小部件的UI。
如何让图标显示在 Android Material Button 中的文本旁边?
我正在尝试使用谷歌开发的材质按钮。由于第三方依赖,我无法使用 androidx 存储库,因此我当前正在使用 android 支持库(v28.0.0-alpha1,
ImageView/ImageButton 中的 srcCompat 和背景有什么不同
我在RelativeLayout中有一个ImageView。 ImageView 的背景是空的,srcCompat 链接到我的可绘制文件夹中的图像。在布局预览中,一切看起来都很好,但是......
我有一个图像视图作为背景。它比屏幕大。我想将其水平居中。它应该与顶部对齐。因此,原始图像的顶部应该在屏幕上看到。我可以调整大小
RecyclerView 中 onBindView 上的 setAlpha() 在首次显示时不起作用
在 RecyclerView.Adapter 中使用以下代码: onBindViewHolder(VH 持有者, int 位置){ holder.itemView.setAlpha(0.5f); } 第一次显示该项目时不会显示 Alpha。哈...
首先,App.getInstance().getWidth() 给出了屏幕宽度。 我正在创建这个 LinearLayout: mainContainer = new LinearLayout(上下文); mainContainer.setLayoutParams(new LayoutParams(
如何在flutter应用程序中处理或重写Android设备后退按钮的操作?
我想将用户导航到主屏幕,并在按下另一个屏幕上的某个按钮后删除以前的导航堆栈。我暂时使用 Navigator.pushNamedAndRemoveUntil 方法...
以编程方式更改 TextInputLayout 聚焦和非聚焦提示颜色
我想在 TEXT INPUT LAYOUT 处于聚焦或未聚焦状态时更改相同的提示颜色。我有两个 TEXT INPUT LAYOUT 字段。两个字段的颜色相同。但它处于聚焦状态颜色
无法使用片段在一个 Activity 中显示两个 XML 布局
我的 Android 项目面临一个问题,我试图在一个 Activity 中显示两个 XML 布局并使用片段在它们之间切换。这是我的设置的细分: 1.活动结构...
我遇到了一个问题,当使用三星手机(android 12)时,系统导航栏与我的视图重叠,如下所示 重叠导航栏 这是我的 style.xml 文件 <question vote="0"> <p>我遇到了一个问题,当使用三星手机(android 12)时,系统导航栏与我的视图重叠,如下所示 <a href="https://i.stack.imgur.com/HuSTa.png" target="_blank"><img src="https://cdn.txt58.com/i/AWkuc3RhY2suaW1ndXIuY29tL0h1U1RhLnBuZw==" alt="overlapping Nav bar "/></a></p> <p>这是我的 style.xml 文件</p> <pre><code><resources> <style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@android:color/transparent</item> <item name="colorAccent">@color/colorAccent</item> <item name="windowNoTitle">true</item> <item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">false</item> <item name="android:windowDrawsSystemBarBackgrounds">false</item> <item name="android:windowBackground">@drawable/shape_splash</item> </style> </code></pre> <p>我也尝试将 <pre><code>fitsSystemWindows</code></pre> 属性设置为 true,但它也不起作用。 即使尝试了 Activity_main.xml 文件中的 <pre><code>layout_marginBottom</code></pre> 参数,但仍然没有帮助。</p> <p>解决此问题的正确方法是什么?</p> </question> <answer tick="false" vote="0"> <p>添加您的主题.xml</p> <pre><code><item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:windowTranslucentNavigation">true</item> </code></pre> <p>在Activity中setContentView(view)之前设置状态栏透明颜色</p> <pre><code> window.statusBarColor = Color.TRANSPARENT </code></pre> </answer> </body></html>
布局预览未在每个布局中显示 - Android Studio
一开始初始化时间比较长,初始化后预览也不起作用。每个布局都有同样的问题。我应该怎么做才能解决这个问题? 我已经尝试过使 Cac 无效...
ArrayAdapter arrayAdapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, R.array.lsViewArray ); lsViewArray.XML: ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, R.array.lsViewArray ); lsViewArray.XML: <resources> <string-array name="lsViewArray"> <item>Magenta</item> <item>Green</item> <item>Blue</item> <item>Red</item> <item>Black</item> <item>Orange</item> <item>Purple</item> <item>Pink</item> <item>White</item> <item>Violet</item> <item>Saffron</item> <item>Yellow</item> <item>Brown</item> </string-array> </resources> 它给我带来了错误R.array.lsViewArray 错误:- 类型 id 的预期资源 除了在MainActivity中制作数组还能做什么 我想通过 lsViewArray.xml 访问它 或者我应该知道的其他方法 在当前代码中,您使用 R.array.lsViewArray 作为 textViewResourceId。 textViewResourceId 是要填充的布局资源中的 TextView 的 id。在您的情况下,要填充的布局资源是 android.R.layout.simple_list_item1。它不包含任何 ID 为 R.array.lsViewArray 的 Textview,因此您会收到错误。 要解决此问题,您可以使用接受 T[] 对象的构造函数。 首先,从您的资源中获取数组。为此,请输入: String[] lsViewArrayData = getResources().getStringArray(R.array.lsViewArray); 然后创建适配器并传递对象 lsViewArrayData: ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, lsViewArrayData);
嘿,我想弄清楚我做错了什么,因为这似乎并没有阻止视图覆盖层后面的控件。 这是我的 xml 布局代码: ...
我在 Android 中构建登录页面时遇到问题。我想将用户名和登录名保留在布局的底部。但是当输入用户名/密码时,键盘会弹出,还有我的背景图片
Jetpack Compose 中动画可绘制的替代方案是什么
我正在尝试在jetpack Compose中实现帧动画。 我知道在android视图系统中,可以通过使用AnimationDrawable来实现。 但是如何在jetp中正确使用动画drawable类...
我想从url加载图像,以及图像下方显示的文本。像这样, ImageView 和 TextView 上的对齐,这是我的代码,但没有显示所需的布局 我想从网址加载图像,以及图像下方显示的文本。像这样, ImageView 和 TextView 上的对齐,这是我的代码,但没有显示所需的布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#00FFFF" android:padding="0.1dp"> <TextView android:text="@string/widgetUrl" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.8" android:layout_gravity="center_vertical" android:textColor="#000000"> </TextView> <TextView android:text="@string/widgetTitle" android:id="@+id/widgetTitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0.8" android:layout_gravity="center_vertical" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:textColor="#ffffff"> </TextView> <ImageView android:id="@+id/widgetBackground" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="0.5" android:src="@drawable/ic_launcher" android:layout_gravity="center_vertical"> </ImageView> </LinearLayout> 如何从网络加载图像并在java代码中显示在布局上?以下是我的小部件提供程序代码: @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); Log.i(WIDGETTAG, "onUpdate"); final int N = appWidgetIds.length; // Perform this loop procedure for each App Widget that belongs to this provider for (int i=0; i<N; i++) { int appWidgetId = appWidgetIds[i]; Log.i(WIDGETTAG, "updating widget[id] " + appWidgetId); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); /* View setup */ views.setInt(R.id.widgetTitle, "setBackgroundColor", Color.argb(150, 0, 0, 0)); Intent intent = new Intent(context, ChopInkService.class); intent.setAction(ChopInkService.UPDATE_IMAGE); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0); views.setOnClickPendingIntent(R.id.widgetBackground, pendingIntent); Log.i(WIDGETTAG, "pending intent set"); // Tell the AppWidgetManager to perform an update on the current App Widget appWidgetManager.updateAppWidget(appWidgetId, views); } Service和AppWidgetProvider的工作是什么? 从 url 加载图像是 service 或 AppWidgetProvider 的工作? 视图设置应该放在service或AppWidgetProvider? 当用户点击小部件时,如何将用户重定向到 Play 商店? 提前致谢。我是新手,如果我问了一个愚蠢的问题,请原谅。 来自 Lars Vogel 的 Android(主屏幕)小部件 - 教程 (vogella.com): 可用的小部件视图和布局 widget 仅限于它可以使用的 View 类。作为布局 您可以使用 FrameLayout、LinearLayout 和 RelativeLayout 类。作为视图,您可以使用 AnalogClock、Button、Chromometer、 ImageButton、ImageView、ProgressBar 和 TextView。 从 Android 3.0 开始,提供了更多视图:GridView、ListView、 StackView、ViewFlipper 和 AdapterViewFlipper。 此适配器视图 要求您定义一个描述的集合视图小部件 在本教程的后面部分。 小部件视图上唯一可能的交互是通过 在 OnClickListener 上。此 OnClickListener 可以注册在小部件上 并且由用户触发。 AppWidgetProvider 您的 BroadcastReceiver 通常会扩展 AppWidgetProvider 类。 AppWidgetProvider 类实现了 onReceive() 方法, 提取所需的信息并调用以下小部件 生命周期方法。 由于您可以将小部件的多个实例添加到主屏幕,因此您可以 具有仅在第一个实例中调用的生命周期方法 添加/删除到主屏幕和其他需要的内容 您的小部件的每个实例。 Widget 的生命周期 onEnabled() - 首次将小部件实例添加到主屏幕时调用 onDisabled() - 从主屏幕中删除小部件的最后一个实例后调用。 onUpdate() - 每次更新小部件时调用。包含需要更新的appWidgetIds的id。请注意,这可能 是该提供程序的所有 AppWidget 实例,或者只是一个子集 其中,如 JavaDoc 方法中所述。例如,如果超过 主屏幕上添加了一个小部件,仅最后一个发生变化 (直到重新安装)。 onDeleted() -Widget 实例从主屏幕中删除 这些方法中所有长时间运行的操作都应该在一个 服务,因为广播接收器的执行时间是有限的。 在 onReceive() 方法中使用异步处理没有帮助 因为系统可以在 onReceive() 之后终止广播进程 方法。 有关小部件的更多详细信息请检查如何在Android中创建小部件? 教程1 教程2 嗨,您可以查看这个教程,了解从 URL (Http) 加载图像。 尝试以下代码: URL 图像小部件提供程序类 public class URLImageAppWidgetProvider extends AppWidgetProvider { public static String TAG = "URLImageWidget"; public static class Size_1_1 extends URLImageAppWidgetProvider {} public static class Size_1_2 extends URLImageAppWidgetProvider {} public static class Size_1_4 extends URLImageAppWidgetProvider {} public static class Size_2_2 extends URLImageAppWidgetProvider {} @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); SharedPreferences urls = context.getSharedPreferences("urls.conf", Context.MODE_PRIVATE); for (int id : appWidgetIds) { String url = urls.getString("url_" + id, ""); update(context, appWidgetManager, id, url); } } @Override public void onDeleted(Context context, int[] appWidgetIds) { super.onDeleted(context, appWidgetIds); SharedPreferences urls = context.getSharedPreferences("urls.conf", Context.MODE_PRIVATE); SharedPreferences.Editor urls_editor = urls.edit(); for (int id : appWidgetIds) { urls_editor.remove("url_" + id); } urls_editor.commit(); } public static void update(final Context context, final AppWidgetManager appWidgetManager, final int id, final String url) { new Thread() { public void run() { Bitmap img = getBitmapFromUrl(url); if (img != null) { RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main); views.setImageViewBitmap(R.id.img, img); appWidgetManager.updateAppWidget(id, views); } } }.start(); } private static Bitmap getBitmapFromUrl(final String url) { try { return BitmapFactory.decodeStream(((java.io.InputStream)new java.net.URL(url).getContent())); } catch (Exception e) { return null; } } } 这里是 URL Image 小部件配置类 public class URLImageAppWidgetConfiguration extends Activity { private int id; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.configuration); setResult(RESULT_CANCELED); Intent intent = getIntent(); Bundle extras = intent.getExtras(); if (extras != null) { id = extras.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } if (id == AppWidgetManager.INVALID_APPWIDGET_ID) { finish(); } } public void addWidget(View v) { SharedPreferences urls = getSharedPreferences("urls.conf", Context.MODE_PRIVATE); SharedPreferences.Editor urls_editor = urls.edit(); String url = ((TextView) findViewById(R.id.url)).getText().toString(); if (!url.startsWith("http://")) url = "http://" + url; urls_editor.putString("url_" + id, url); urls_editor.commit(); AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this); URLImageAppWidgetProvider.update(this, appWidgetManager, id, url); setResult(RESULT_OK, new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id) ); finish(); } }
目前我正在使用(学习使用)ConstraintLayout。现在我创建了一个简单的布局,每个按钮下每行有 3 个按钮,我放置了一个文本视图,目前我正在手动添加按钮...
当我尝试在屏幕底部的 EditText 中写入内容时,软键盘会隐藏 EditText。我该如何解决这个问题?下面是我的 xml 代码。我在 Frag 中使用这个...
setVisibility(View.INVISIBLE);有什么区别设置可见性(0);
当我将文本视图可见性设置为 文本.setVisibility(0);我无法隐藏这个文本视图。但是当我将代码更新为text.setVisibility(View.INVISIBLE)后,textview被隐藏了......
防止 Snackbar 与 Activity 子 Fragment 的 ConstraintLayout 中的 FloatingActionButton 重叠
这是我当前的设置: 我有一个在根布局(CoordinatorLayout)上注册小吃栏的 BaseActivity: 这是我当前的设置: 我有一个在根布局(CoordinatorLayout)上注册小吃栏的 BaseActivity: <?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/snackbar_container" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_dodgeInsetEdges="bottom"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.google.android.material.appbar.AppBarLayout android:id="@+id/app_bar_layout" android:layout_width="match_parent" android:layout_height="wrap_content"> <include layout="@layout/toolbar" /> </com.google.android.material.appbar.AppBarLayout> <include layout="@layout/progressbar_with_text" /> <androidx.fragment.app.FragmentContainerView android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout> 现在我添加一个如下所示的片段: <?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" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.viewpager.widget.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="0dp" app:layout_behavior="@string/appbar_scrolling_view_behavior" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent" /> <com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/fab_save" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/content_save" android:tint="@android:color/white" android:visibility="gone" app:backgroundTint="@color/secondary" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:tint="@android:color/white" app:useCompatPadding="true" tools:ignore="SpeakableTextPresentCheck" tools:visibility="visible" /> </androidx.constraintlayout.widget.ConstraintLayout> 我希望晶圆厂在显示时被小吃栏推起,目前它与小吃栏重叠。 我知道使用 CoordinatorLayout 作为根并将 FloatingActionButton (FAB) 放置在其中可以与属性 app:layout_dodgeInsetEdges="bottom" 配合使用。此设置可确保在显示 Snackbar 时将 FAB 向上推。但是,对于子片段,我无法获得类似的结果。是的,我的设置必须保持原样,因为我有多个彼此不同的片段,并且包含独特样式的 FAB,因此将 FAB 移动到活动级别不是一个选项。 您应该在 BaseActivity 中创建一个方法来显示小吃栏,在该方法中通过其 id 找到 coordinatorLayout。 public void showSnackbar(String message, int duration) { CoordinatorLayout coordinatorLayout = findViewById(R.id.snackbar_container); Snackbar.make(coordinatorLayout, message, duration).show(); } 你的fragment应该能够访问BaseActivity。确保你的activity实现了某个接口,这将允许fragment与activity进行通信。 public class MyFragment extends Fragment { private BaseActivity activity; @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof BaseActivity) { activity = (BaseActivity) context; } } private void showSnackbar(String message) { activity.showSnackbar(message, Snackbar.LENGTH_SHORT); } }
这是我的布局: 这是我的布局: <androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" tools:context=".ScannerFragment"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <androidx.camera.view.PreviewView android:id="@+id/cameraPreview" android:layout_width="match_parent" android:layout_height="0dp" app:layout_constraintDimensionRatio="16:9" app:layout_constraintTop_toTopOf="parent" /> <ScrollView android:id="@+id/scrollView" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_constraintTop_toBottomOf="@id/cameraPreview"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/saleList" android:layout_width="match_parent" android:layout_height="wrap_content" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> </ScrollView> <View android:id="@+id/filler" android:layout_width="match_parent" android:layout_height="0dp" app:layout_constraintTop_toBottomOf="@id/scrollView" app:layout_constraintVertical_weight="1" /> <androidx.appcompat.widget.LinearLayoutCompat android:id="@+id/total_widget" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="4dp" app:layout_constraintBottom_toBottomOf="parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/total" android:textSize="24sp" /> <View android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> <TextView android:id="@+id/sum" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="24sp" /> </androidx.appcompat.widget.LinearLayoutCompat> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.appcompat.widget.LinearLayoutCompat> 这就是它的样子: 请查看图像底部,RecyclerView 中的项目是否覆盖了“Total”文本。我希望 RecyclerView 最多扩展至“Total”文本的顶部。 问题是,即使 RecyclerView 为空,我也希望“Total”文本粘在广告上方的底部。因此我不能简单地以这种方式限制它。 我尝试了“填充”视图的各种约束,但这也无法正常工作。在某些情况下,添加到 RecyclerView 的项目会使 RecyclerView 从 CameraPreview 和“Total”文本之间的中间展开。只是最终覆盖了 CameraPreview 和“Total”文本... 是否有一种有意识的方法来实现我想要的布局,而无需无休止地摆弄它? 几件事: 1)Recyclerviews 内置了滚动功能。无需将其放入 ScrollView 中。 2)向RecyclerView添加constraint_bottom_toTopOf(在删除滚动视图之后)并将其限制在您不希望它重叠的任何视图之上(我假设是total_widget)