我创建了一个应用程序,正在其中从服务器中获取数据。因此,我在代码中使用了JSON解析。我已成功从服务器解析了JSON。现在,我想根据从JSON响应获得的可见性在布局中设置按钮。
也就是说,如果可见性为true,则按钮应该可见,如果为false,则按钮应禁用。它可以工作,但是如果某个按钮的可见性为false,则布局中会有空间。因此,如何动态设置布局以使所有可见按钮都显示在一行中。
我创建了三个线性布局,每个线性布局包含三个按钮。现在,如果json响应显示某个按钮的可见性为false,则将该按钮的可见性设置为off。
if (Menuname.equals("StudentDailyDiary")) {
studentdiary.setVisibility(View.VISIBLE);
moreOptionLayout.setVisibility(View.VISIBLE);
hrview.setVisibility(View.VISIBLE);
rlleftview.setVisibility(View.VISIBLE);
rlrightview.setVisibility(View.VISIBLE);
}
if (Menuname.equals("BookSearch")) {
studlibrary.setVisibility(View.VISIBLE);
moreOptionLayout.setVisibility(View.VISIBLE);
hrview.setVisibility(View.VISIBLE);
rlleftview.setVisibility(View.VISIBLE);
rlrightview.setVisibility(View.VISIBLE);
}
在第一个布局中说三个按钮,第二个按钮的可见性为假,那么在第二个按钮的位置应放置第三个按钮,所有布局中的按钮都不应有空格。也就是说,如果第三个按钮的可见性为假,则第二个布局的第一个按钮应设置在第三个按钮的位置。
答案 0 :(得分:1)
我认为要使用的正确ViewGroup是GridLayout
。
下面是一个简单的示例:
activity_main.xml
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="80dp"
android:gravity="center"
android:numColumns="3"
android:stretchMode="columnWidth" />
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val numbers = arrayOf("BUTTON1", "BUTTON2", "BUTTON4", "BUTTON5", "BUTTON6")
val adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, numbers)
gridView.adapter = adapter
gridView.onItemClickListener = AdapterView.OnItemClickListener {
parent, v, position, id ->
Toast.makeText(applicationContext, (v as TextView).text, Toast.LENGTH_SHORT).show()
}
}
}
此示例使用String,但是您可以创建任何所需的适配器。现在,在执行JSON响应后,只需填充数组并将其设置为适配器即可。
希望有帮助
答案 1 :(得分:0)
对于元素可见性,有三个选项,
View.VISIBLE
View.INVISIBLE
View.GONE
使用View.GONE表示不想显示的元素。
答案 2 :(得分:0)
之间的区别
View.INVISIBLE
和
View.GONE
是View.GONE不占空间,您应该使用view.GONE
答案 3 :(得分:0)
您有两种选择可以这样做
1:-
View.VISIBLE //Visible the view which is acquire its space
View.INVISIBLE //Invisible the view and it acquire the space
View.GONE //visibility Gone of its view and also not acquire view space
2:-
您可以使用RecyclerView
并将模型传递给adapter
,然后根据其model
显示按钮。
答案 4 :(得分:0)
在布局XML中将按钮可见性设置为消失 因此,他们在可见性不可见的情况下不会留有空白
<Button
android:id="@+id/btn_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:visibility="gone"/>