如何使 scrollview 适合屏幕
How fit scrollview properly to screen
我对滚动视图有疑问。我在互联网上查找,但我无法找到任何解决方案。我在我的应用程序中使用窗口 activity。在添加滚动视图之前,我可以毫无问题地使用它。 Scrollview 不适合屏幕。
这是我的 activity 代码。
class ExtendedMedicineInfoActivity : Activity() {
private lateinit var binding: ActivityExtendedMedicineInfoBinding
var medicineUsageData = MedicineUsageData()
var gson = Gson()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityExtendedMedicineInfoBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
medicineUsageData = gson.fromJson(intent.getStringExtra("medicineData"), MedicineUsageData::class.java)
val displayMetrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(displayMetrics)
val width = displayMetrics.widthPixels
val height = displayMetrics.heightPixels
window.setLayout((width * .8).toInt(), (height * .8).toInt())
val params = window.attributes
params.gravity = Gravity.CENTER
params.x = 0
params.y = -20
window.attributes = params
setFields()
}
private fun setFields() {
binding.expireDateEditText.setText(medicineUsageData.expireDate)
binding.barcodeNumEditText.setText(medicineUsageData.barcodeNum)
binding.companyNameEditText.setText(medicineUsageData.companyName)
binding.drugSubstanceEditText.setText(medicineUsageData.drugSubstance)
binding.medicineNameEditText.setText(medicineUsageData.productName)
binding.partyNumEditText.setText(medicineUsageData.partyNum)
binding.serialNumEditText.setText(medicineUsageData.serialNum)
}
}
这段代码没有产生任何错误。我也将它用于我的其他窗口活动。但这是我第一次尝试为其添加滚动视图。
这是 xml 代码 activity
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:orientation="vertical"
android:background="@drawable/popup_medicine_list"
tools:context=".ExtendedMedicineInfoActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="@string/medicine_information"
android:textSize="32sp" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<GridLayout
android:id="@+id/grid_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:clipToPadding="false"
android:columnCount="1"
android:padding="16dp">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/medicine_name_text_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:hint="@string/medicine_name">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/medicine_name_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:textColor="@color/black" />
</com.google.android.material.textfield.TextInputLayout>
<Space />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/expire_date_text_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:hint="@string/expire_date">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/expire_date_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:textColor="@color/black" />
</com.google.android.material.textfield.TextInputLayout>
<Space />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/company_name_text_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:hint="@string/company_name">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/company_name_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:textColor="@color/black" />
</com.google.android.material.textfield.TextInputLayout>
<Space />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/barcode_num_text_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:hint="@string/barcode_number">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/barcode_num_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:textColor="@color/black" />
</com.google.android.material.textfield.TextInputLayout>
<Space />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/drug_substance_text_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:hint="@string/drug_substance">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/drug_substance_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:textColor="@color/black" />
</com.google.android.material.textfield.TextInputLayout>
<Space />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/party_num_text_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:hint="@string/party_number">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/party_num_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:textColor="@color/black" />
</com.google.android.material.textfield.TextInputLayout>
<Space />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/serial_num_text_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:hint="@string/serial_number">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/serial_num_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:textColor="@color/black" />
</com.google.android.material.textfield.TextInputLayout>
</GridLayout>
</ScrollView>
<com.google.android.material.button.MaterialButton
android:id="@+id/delete_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/delete" />
</LinearLayout>
此代码构建和运行没有错误。但这就是结果。
如您所见,顶部还有另一个元素,但未显示。
而且下面还有多余的space。
我可以通过将 android:layout_marginTop="56dp"
添加到内部 GridLayout 来解决上面的问题。但我知道这不是最好的解决方案。屏幕尺寸可以改变或其他。即使我添加了这一行,它也无法解决我的缺点冗余 space 问题。
谁能帮我解决这个问题。提前致谢。
我明白了。当我更改我的代码值时,我的问题就解决了。
这是我更改的代码。
window.setLayout((width * .8).toInt(), (height * .8).toInt())
val params = window.attributes
params.gravity = Gravity.CENTER
params.x = 0
params.y = -20
我改成了这样:
window.setLayout((width * .8).toInt(), (height * .9).toInt())
val params = window.attributes
params.gravity = Gravity.CENTER
params.x = 0
params.y = 100
我对滚动视图有疑问。我在互联网上查找,但我无法找到任何解决方案。我在我的应用程序中使用窗口 activity。在添加滚动视图之前,我可以毫无问题地使用它。 Scrollview 不适合屏幕。
这是我的 activity 代码。
class ExtendedMedicineInfoActivity : Activity() {
private lateinit var binding: ActivityExtendedMedicineInfoBinding
var medicineUsageData = MedicineUsageData()
var gson = Gson()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityExtendedMedicineInfoBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
medicineUsageData = gson.fromJson(intent.getStringExtra("medicineData"), MedicineUsageData::class.java)
val displayMetrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(displayMetrics)
val width = displayMetrics.widthPixels
val height = displayMetrics.heightPixels
window.setLayout((width * .8).toInt(), (height * .8).toInt())
val params = window.attributes
params.gravity = Gravity.CENTER
params.x = 0
params.y = -20
window.attributes = params
setFields()
}
private fun setFields() {
binding.expireDateEditText.setText(medicineUsageData.expireDate)
binding.barcodeNumEditText.setText(medicineUsageData.barcodeNum)
binding.companyNameEditText.setText(medicineUsageData.companyName)
binding.drugSubstanceEditText.setText(medicineUsageData.drugSubstance)
binding.medicineNameEditText.setText(medicineUsageData.productName)
binding.partyNumEditText.setText(medicineUsageData.partyNum)
binding.serialNumEditText.setText(medicineUsageData.serialNum)
}
}
这段代码没有产生任何错误。我也将它用于我的其他窗口活动。但这是我第一次尝试为其添加滚动视图。
这是 xml 代码 activity
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:orientation="vertical"
android:background="@drawable/popup_medicine_list"
tools:context=".ExtendedMedicineInfoActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="@string/medicine_information"
android:textSize="32sp" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<GridLayout
android:id="@+id/grid_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:clipToPadding="false"
android:columnCount="1"
android:padding="16dp">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/medicine_name_text_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:hint="@string/medicine_name">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/medicine_name_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:textColor="@color/black" />
</com.google.android.material.textfield.TextInputLayout>
<Space />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/expire_date_text_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:hint="@string/expire_date">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/expire_date_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:textColor="@color/black" />
</com.google.android.material.textfield.TextInputLayout>
<Space />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/company_name_text_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:hint="@string/company_name">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/company_name_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:textColor="@color/black" />
</com.google.android.material.textfield.TextInputLayout>
<Space />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/barcode_num_text_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:hint="@string/barcode_number">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/barcode_num_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:textColor="@color/black" />
</com.google.android.material.textfield.TextInputLayout>
<Space />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/drug_substance_text_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:hint="@string/drug_substance">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/drug_substance_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:textColor="@color/black" />
</com.google.android.material.textfield.TextInputLayout>
<Space />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/party_num_text_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:hint="@string/party_number">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/party_num_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:textColor="@color/black" />
</com.google.android.material.textfield.TextInputLayout>
<Space />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/serial_num_text_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:hint="@string/serial_number">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/serial_num_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:textColor="@color/black" />
</com.google.android.material.textfield.TextInputLayout>
</GridLayout>
</ScrollView>
<com.google.android.material.button.MaterialButton
android:id="@+id/delete_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/delete" />
</LinearLayout>
此代码构建和运行没有错误。但这就是结果。
如您所见,顶部还有另一个元素,但未显示。
而且下面还有多余的space。
我可以通过将 android:layout_marginTop="56dp"
添加到内部 GridLayout 来解决上面的问题。但我知道这不是最好的解决方案。屏幕尺寸可以改变或其他。即使我添加了这一行,它也无法解决我的缺点冗余 space 问题。
谁能帮我解决这个问题。提前致谢。
我明白了。当我更改我的代码值时,我的问题就解决了。
这是我更改的代码。
window.setLayout((width * .8).toInt(), (height * .8).toInt())
val params = window.attributes
params.gravity = Gravity.CENTER
params.x = 0
params.y = -20
我改成了这样:
window.setLayout((width * .8).toInt(), (height * .9).toInt())
val params = window.attributes
params.gravity = Gravity.CENTER
params.x = 0
params.y = 100