Android: 子类linearLayout 不垂直设置
Android: Subclass linearLayout do not set vertically
我想在下面翻译我的代码xml,但是在代码中并没有给我相同的结果,看图,左边是代码中的结果,右边是[=25中的结果=]:
这是我的子类:
class FloatingButtonMultiple : LinearLayout {
constructor(context: Context) : super(context) {
setup()
}
constructor(context: Context, @Nullable attrs: AttributeSet?) : super(context, attrs) {
setup()
}
constructor(context: Context, @Nullable attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
setup()
}
// MARK: - Set view
fun setup() {
setLinearLayout()
floatingBtn()
addBtn()
}
private fun setLinearLayout() {
val params = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT).apply {
addRule(RelativeLayout.ALIGN_PARENT_BOTTOM)
}
orientation = VERTICAL
this.layoutParams = params
}
private fun addBtn() {
val linearParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT).apply {
gravity = Gravity.END
orientation = HORIZONTAL
}
val linearLayout = LinearLayout(context).apply {
layoutParams = linearParams
}
// CardView
val cardParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
topMargin = 8.toDp
marginEnd = 10.toDp
}
val cardView = CardView(context).apply {
setCardBackgroundColor(Color.parseColor("#C4000000"))
layoutParams = cardParams
}
//TextView
val txtParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
marginStart = 8.toDp
marginEnd = 8.toDp
}
val txt = TextView(context).apply {
text = "AAAAA"
setTextColor(Color.WHITE)
layoutParams = txtParams
}
cardView.addView(txt)
linearLayout.addView(cardView)
//Btn
val btnParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
bottomMargin = 8.toDp
marginEnd = 29.toDp
}
val btn = FloatingActionButton(context).apply {
size = FloatingActionButton.SIZE_MINI
layoutParams = btnParams
}
linearLayout.addView(btn)
this.addView(linearLayout)
}
private fun floatingBtn() {
val params = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
gravity = Gravity.END
marginEnd = 20.toDp
bottomMargin = 20.toDp
}
val btn = FloatingActionButton(context).apply {
layoutParams = params
}
this.addView(btn)
}
这是我的 xml 代码:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="end"
android:orientation="horizontal">
<android.support.v7.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="10dp"
app:cardBackgroundColor="#C4000000">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:text="AAAA"
android:textColor="#fff" />
</android.support.v7.widget.CardView>
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="29dp"
android:layout_marginBottom="8dp"
app:fabSize="mini" />
</LinearLayout>
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginEnd="20dp"
android:layout_marginBottom="20dp" />
</LinearLayout>
我没看懂我想我翻译的代码正好xml代码?问题出在哪里?为什么我的子类在函数 setLinearLayout()
中设置时不垂直
您需要在代码中的以下变量中将方向设置为垂直 -
val linearLayout = LinearLayout(context).apply {
layoutParams = linearParams
}
linearlayout.orientation = VERTICAL
解决方案
这很奇怪,但是通过调用 setLinearLayout()
最后它起作用
来改变函数的位置
代码:
fun setup() {
floatingBtn()
addBtn()
setLinearLayout()
}
我想在下面翻译我的代码xml,但是在代码中并没有给我相同的结果,看图,左边是代码中的结果,右边是[=25中的结果=]:
这是我的子类:
class FloatingButtonMultiple : LinearLayout {
constructor(context: Context) : super(context) {
setup()
}
constructor(context: Context, @Nullable attrs: AttributeSet?) : super(context, attrs) {
setup()
}
constructor(context: Context, @Nullable attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
setup()
}
// MARK: - Set view
fun setup() {
setLinearLayout()
floatingBtn()
addBtn()
}
private fun setLinearLayout() {
val params = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT).apply {
addRule(RelativeLayout.ALIGN_PARENT_BOTTOM)
}
orientation = VERTICAL
this.layoutParams = params
}
private fun addBtn() {
val linearParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT).apply {
gravity = Gravity.END
orientation = HORIZONTAL
}
val linearLayout = LinearLayout(context).apply {
layoutParams = linearParams
}
// CardView
val cardParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
topMargin = 8.toDp
marginEnd = 10.toDp
}
val cardView = CardView(context).apply {
setCardBackgroundColor(Color.parseColor("#C4000000"))
layoutParams = cardParams
}
//TextView
val txtParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
marginStart = 8.toDp
marginEnd = 8.toDp
}
val txt = TextView(context).apply {
text = "AAAAA"
setTextColor(Color.WHITE)
layoutParams = txtParams
}
cardView.addView(txt)
linearLayout.addView(cardView)
//Btn
val btnParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
bottomMargin = 8.toDp
marginEnd = 29.toDp
}
val btn = FloatingActionButton(context).apply {
size = FloatingActionButton.SIZE_MINI
layoutParams = btnParams
}
linearLayout.addView(btn)
this.addView(linearLayout)
}
private fun floatingBtn() {
val params = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
gravity = Gravity.END
marginEnd = 20.toDp
bottomMargin = 20.toDp
}
val btn = FloatingActionButton(context).apply {
layoutParams = params
}
this.addView(btn)
}
这是我的 xml 代码:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="end"
android:orientation="horizontal">
<android.support.v7.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="10dp"
app:cardBackgroundColor="#C4000000">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:text="AAAA"
android:textColor="#fff" />
</android.support.v7.widget.CardView>
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="29dp"
android:layout_marginBottom="8dp"
app:fabSize="mini" />
</LinearLayout>
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginEnd="20dp"
android:layout_marginBottom="20dp" />
</LinearLayout>
我没看懂我想我翻译的代码正好xml代码?问题出在哪里?为什么我的子类在函数 setLinearLayout()
您需要在代码中的以下变量中将方向设置为垂直 -
val linearLayout = LinearLayout(context).apply {
layoutParams = linearParams
}
linearlayout.orientation = VERTICAL
解决方案
这很奇怪,但是通过调用 setLinearLayout()
最后它起作用
代码:
fun setup() {
floatingBtn()
addBtn()
setLinearLayout()
}