我有一个可绘制的pasek_postepu.xml文件,用作activity_add.xml中View的背景。 pasek_postepu.xml是一个层列表,包含2个项目:矩形。
activity_add.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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"
tools:context=".AddActivity"
android:background="@color/background">
<View
android:id="@+id/pasek_postepu_dodawanie"
android:layout_width="match_parent"
android:layout_height="10dp"
android:layout_margin="5dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:background="@color/pasek_postepu"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
pasek_postepu.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/pasek_postepu_1_element"
android:left="20dp"
android:right="200dp">
<shape android:shape="rectangle">
<solid android:color="@color/red"/>
</shape>
</item>
<item
android:id="@+id/pasek_postepu_2_element"
android:left="200dp"
android:right="20dp">
<shape android:shape="rectangle">
<solid android:color="@color/green"/>
</shape>
</item>
</layer-list>
我想以编程方式设置每个屏幕的大小,具体取决于屏幕宽度,因此每个屏幕都将占据屏幕的1/2,包括页边距和它们之间的一些间距,例如10dp。我已经将屏幕宽度提取到int dpWidth
,所以这不是问题。这是我的Java文件:
AddActivity.java
package com.example.kamil.math;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.LayerDrawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
public class AddActivity extends AppCompatActivity {
private static int ilosc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
ChangeSize();
}
@SuppressLint("ResourceAsColor")
public void ChangeSize(int ktory_cykl){
LayerDrawable pasek = (LayerDrawable)getResources().getDrawable(R.drawable.pasek_postepu);
GradientDrawable pasek1 = (GradientDrawable) pasek.findDrawableByLayerId(R.id.pasek_postepu_1_element);
GradientDrawable pasek2 = (GradientDrawable) pasek.findDrawableByLayerId(R.id.pasek_postepu_2_element);
pasek1.setColor(Color.rgb(31,135,31)); //green
pasek2.setColor(Color.rgb(196,32,32)); //red
View pasek_id = findViewById(R.id.pasek_postepu_dodawanie);
pasek_id.setBackground(getApplicationContext().getResources().getDrawable(R.drawable.pasek_postepu));
}
}
我可以“访问”每个项目并更改其颜色,但是看不到更改尺寸的方法。我试图修改左和右,例如pasek1.setLeft(...);
,但收到一条消息“无法解析符号setLeft”。我不能使用width
,因为它可以在Android 6+上运行,并且我需要Android 5兼容性。
有没有办法设置Java文件中每个项目的大小?
答案 0 :(得分:0)
使用constraintLayout
代替LinearLayout
在LinearLayout中,有一个名为android:weightSum
的属性
这是一个示例
<LinearLayout
android:background="@color/DarkGoldenrod"
android:layout_height="0dp"
android:layout_width="match_parent"
android:layout_weight="2" />
<TextView
android:background="#00FF00"
android:layout_height="0dp"
android:layout_width="match_parent"
android:layout_weight="1" />
<TextView
android:background="@color/red"
android:layout_height="0dp"
android:layout_width="match_parent"
android:layout_weight="1" />
通过给出weightSum = 2的
并给每个TextView = 1
无论设备大小,它们每个都将占用相同的空间
这里是link,以获取更多信息