Java View.setBackgroundResource()未设置正确的后台资源
我正在第二次编写一个“设置pin”片段,但它不起作用。在我使用Java View.setBackgroundResource()未设置正确的后台资源,java,android,android-studio,android-button,android-background,Java,Android,Android Studio,Android Button,Android Background,我正在第二次编写一个“设置pin”片段,但它不起作用。在我使用switch块和View.OnTouchListener之前,一切都很正常。我试图改变按钮的背景资源,以不同的绘图时按下,然后回到手指被提起 我的问题是背景资源根本没有改变 用于布局的XML: <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xml
switch
块和View.OnTouchListener
之前,一切都很正常。我试图改变按钮的背景资源,以不同的绘图时按下,然后回到手指被提起
我的问题是背景资源根本没有改变
用于布局的XML:
<?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:background="@color/tertiary_dark"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:theme="@style/Theme.Design.NoActionBar"
>
<View
android:id="@+id/divider3"
android:layout_width="364.059dp"
android:layout_height="2dp"
android:background="@color/secondary_accent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tableLayout" />
<TableLayout
android:id="@+id/tableLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:id="@+id/pin7"
android:layout_width="@dimen/button_1_width"
android:layout_height="@dimen/button_1_height"
android:layout_margin="@dimen/button_1_margin"
android:fontFamily="@font/slatebook"
android:padding="0dp"
android:background="@drawable/button_1_background_idle"
android:text="7"
android:textColor="@color/primary_light"
android:textSize="22sp" />
<Button
android:id="@+id/pin8"
android:layout_width="@dimen/button_1_width"
android:layout_height="@dimen/button_1_height"
android:layout_margin="@dimen/button_1_margin"
android:background="@color/primary_dark"
android:fontFamily="@font/slatebook"
android:padding="0dp"
android:text="8"
android:textColor="@color/primary_light"
android:textSize="22sp" />
<Button
android:id="@+id/pin9"
android:layout_width="@dimen/button_1_width"
android:layout_height="@dimen/button_1_height"
android:layout_margin="@dimen/button_1_margin"
android:background="@color/primary_dark"
android:fontFamily="@font/slatebook"
android:padding="0dp"
android:text="9"
android:textColor="@color/primary_light"
android:textSize="22sp" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/pin4"
android:layout_width="@dimen/button_1_width"
android:layout_height="@dimen/button_1_height"
android:layout_margin="@dimen/button_1_margin"
android:background="@color/primary_dark"
android:fontFamily="@font/slatebook"
android:padding="0dp"
android:text="4"
android:textColor="@color/primary_light"
android:textSize="22sp" />
<Button
android:id="@+id/pin5"
android:layout_width="@dimen/button_1_width"
android:layout_height="@dimen/button_1_height"
android:layout_margin="@dimen/button_1_margin"
android:background="@color/primary_dark"
android:fontFamily="@font/slatebook"
android:padding="0dp"
android:text="5"
android:textColor="@color/primary_light"
android:textSize="22sp" />
<Button
android:id="@+id/pin6"
android:layout_width="@dimen/button_1_width"
android:layout_height="@dimen/button_1_height"
android:layout_margin="@dimen/button_1_margin"
android:background="@color/primary_dark"
android:fontFamily="@font/slatebook"
android:padding="0dp"
android:text="6"
android:textColor="@color/primary_light"
android:textSize="22sp" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/pin1"
android:layout_width="@dimen/button_1_width"
android:layout_height="@dimen/button_1_height"
android:layout_margin="@dimen/button_1_margin"
android:background="@color/primary_dark"
android:fontFamily="@font/slatebook"
android:padding="0dp"
android:text="1"
android:textColor="@color/primary_light"
android:textSize="22sp" />
<Button
android:id="@+id/pin2"
android:layout_width="@dimen/button_1_width"
android:layout_height="@dimen/button_1_height"
android:layout_margin="@dimen/button_1_margin"
android:background="@color/primary_dark"
android:fontFamily="@font/slatebook"
android:padding="0dp"
android:text="2"
android:textColor="@color/primary_light"
android:textSize="22sp" />
<Button
android:id="@+id/pin3"
android:layout_width="@dimen/button_1_width"
android:layout_height="@dimen/button_1_height"
android:layout_margin="@dimen/button_1_margin"
android:background="@color/primary_dark"
android:fontFamily="@font/slatebook"
android:padding="0dp"
android:text="3"
android:textColor="@color/primary_light"
android:textSize="22sp" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/pina"
android:layout_width="@dimen/button_1_width"
android:layout_height="@dimen/button_1_height"
android:layout_margin="@dimen/button_1_margin"
android:background="@color/primary_dark"
android:fontFamily="@font/slatebook"
android:padding="0dp"
android:text="A"
android:textColor="@color/primary_light"
android:textSize="22sp" />
<Button
android:id="@+id/pin0"
android:layout_width="@dimen/button_1_width"
android:layout_height="@dimen/button_1_height"
android:layout_margin="@dimen/button_1_margin"
android:background="@color/primary_dark"
android:fontFamily="@font/slatebook"
android:padding="0dp"
android:text="0"
android:textColor="@color/primary_light"
android:textSize="22sp" />
<Button
android:id="@+id/pinb"
android:layout_width="@dimen/button_1_width"
android:layout_height="@dimen/button_1_height"
android:layout_margin="@dimen/button_1_margin"
android:background="@color/primary_dark"
android:fontFamily="@font/slatebook"
android:padding="0dp"
android:text="B"
android:textColor="@color/primary_light"
android:textSize="22sp" />
</TableRow>
</TableLayout>
<View
android:id="@+id/view"
android:layout_width="364.059dp"
android:layout_height="75dp"
android:layout_marginTop="104dp"
android:background="@color/primary_dark"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.489"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/slatebook"
android:text="1234567890ab"
android:textColor="@color/primary_light"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="@+id/view"
app:layout_constraintEnd_toEndOf="@+id/view"
app:layout_constraintStart_toStartOf="@+id/view"
app:layout_constraintTop_toTopOf="@+id/view" />
<View
android:id="@+id/divider"
android:layout_width="364.059dp"
android:layout_height="2dp"
android:background="@color/secondary_accent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/view" />
</androidx.constraintlayout.widget.ConstraintLayout>
java类的代码:
package com.example.portal;
import android.annotation.SuppressLint;
import android.graphics.Color;
import android.os.Bundle;
import android.system.StructUtsname;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.navigation.fragment.NavHostFragment;
import java.util.ArrayList;
public class FirstFragment extends Fragment {
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState
) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.login_layout, container, false);
}
@SuppressLint("ClickableViewAccessibility")
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
load();
}
@SuppressLint("ClickableViewAccessibility")
private void load() {
ArrayList<Button> pinbtns = new ArrayList<>();
ArrayList<Character> vals = new ArrayList<>();
pinbtns.add((Button) getActivity().findViewById(R.id.pin0));
pinbtns.add((Button) getActivity().findViewById(R.id.pin1));
pinbtns.add((Button) getActivity().findViewById(R.id.pin2));
pinbtns.add((Button) getActivity().findViewById(R.id.pin3));
pinbtns.add((Button) getActivity().findViewById(R.id.pin4));
pinbtns.add((Button) getActivity().findViewById(R.id.pin5));
pinbtns.add((Button) getActivity().findViewById(R.id.pin6));
pinbtns.add((Button) getActivity().findViewById(R.id.pin7));
pinbtns.add((Button) getActivity().findViewById(R.id.pin8));
pinbtns.add((Button) getActivity().findViewById(R.id.pin9));
pinbtns.add((Button) getActivity().findViewById(R.id.pina));
pinbtns.add((Button) getActivity().findViewById(R.id.pinb));
vals.add('0');
vals.add('1');
vals.add('2');
vals.add('3');
vals.add('4');
vals.add('5');
vals.add('6');
vals.add('7');
vals.add('8');
vals.add('9');
vals.add('a');
vals.add('b');
for (int r = 0; r < pinbtns.size(); r++) {
Button btn = pinbtns.get(r);
btn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
btn.setBackgroundResource(R.drawable.button_1_background_pressed);
System.out.println("down");
return true;
case MotionEvent.ACTION_UP:
Thread t = new Thread(() -> {
try {
Thread.sleep(50);
} catch (Exception ig) {
ig.printStackTrace();
}
getActivity().runOnUiThread(() -> {
btn.setBackgroundResource(R.drawable.button_1_background_idle);
});
});
t.start();
System.out.println("up");
return true;
}
return false;
}
});
}
}
}
package com.example.portal;
导入android.annotation.SuppressLint;
导入android.graphics.Color;
导入android.os.Bundle;
导入android.system.StructUtsname;
导入android.view.LayoutInflater;
导入android.view.MotionEvent;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.Button;
导入androidx.annotation.NonNull;
导入androidx.core.content.ContextCompat;
导入androidx.fragment.app.fragment;
导入androidx.navigation.fragment.NavHostFragment;
导入java.util.ArrayList;
公共类FirstFragment扩展了Fragment{
@凌驾
公共视图onCreateView(
充气机、视图组容器、,
捆绑存储状态
) {
//为该碎片膨胀布局
返回充气机。充气(R.layout.login\u布局,容器,假);
}
@SuppressLint(“ClickableViewAccessibility”)
已创建公用void onview(@NonNull视图,Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
加载();
}
@SuppressLint(“ClickableViewAccessibility”)
专用空心荷载(){
ArrayList pinbtns=新的ArrayList();
ArrayList VAL=新的ArrayList();
添加((按钮)getActivity().findViewById(R.id.pin0));
添加((按钮)getActivity().findViewById(R.id.pin1));
添加((按钮)getActivity().findViewById(R.id.pin2));
添加((按钮)getActivity().findViewById(R.id.pin3));
添加((按钮)getActivity().findViewById(R.id.pin4));
添加((按钮)getActivity().findViewById(R.id.pin5));
添加((按钮)getActivity().findViewById(R.id.pin6));
添加((按钮)getActivity().findViewById(R.id.pin7));
添加((按钮)getActivity().findViewById(R.id.pin8));
添加((按钮)getActivity().findViewById(R.id.pin9));
添加((按钮)getActivity().findViewById(R.id.pina));
添加((按钮)getActivity().findViewById(R.id.pinb));
VAL.add('0');
增值税增加(“1”);
增值税增加(“2”);
VAL.添加(“3”);
VAL.添加('4');
VAL.添加('5');
增值税增加(“6”);
增加(“7”);
增加(“8”);
增加(“9”);
增加(“a”);
VAL.添加('b');
对于(int r=0;r{
试一试{
睡眠(50);
}捕获(异常ig){
ig.printStackTrace();
}
getActivity().runOnUiThread(()->{
btn.setBackgroundResource(R.drawable.button\u 1\u background\u idle);
});
});
t、 start();
System.out.println(“up”);
返回true;
}
返回false;
}
});
}
}
}
可提取物品代码:
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<solid
android:color="@color/primary_dark"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<solid
android:color="@color/primary_accent"/>
</shape>
和颜色资源文件的良好措施
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="primary_light">#dcdcdc </color>
<color name="primary_dark">#1c1d1f</color>
<color name="secondary_dark">#151515</color>
<color name="tertiary_dark">#323335</color>
<color name="secondary_light">#9ea09f</color>
<color name="primary_accent">#c41442</color>
<color name="secondary_accent">#711930</color>
</resources>
#DCDC
#1c1d1f
#151515
#323335
#9ea09f
#c41442
#711930
再澄清一次。当我按下一个按钮(例如pin7)时,系统将“向下”打印到控制台,但背景一点也没有改变。当我释放时,我会在控制台中“起来”。因此,除了背景之外,它可以按预期工作
我试过了
将
setBackgroundResource
更改为setBackroundColor
,结果相同。我花了2个小时,试图找出setBackgroundResource()
不起作用的原因。我在形状上添加了一些修改,我注意到除了颜色之外,这些修改只在尺寸上进行。因此,我创建了一种消除色调的样式,我将backgroundTint
放在@null
上,一切正常
这是我添加的样式
<style name="NotTintedButton" parent="Widget.AppCompat.Button.Colored">
<item name="backgroundTint">@null</item>
</style>
@空的
你所要做的就是在每个按钮上应用这个样式。例如:
<Button
style="@style/NotTintedButton"
android:id="@+id/pin8"
android:layout_width="@dimen/button_1_width"
android:layout_height="@dimen/button_1_height"
android:layout_margin="@dimen/button_1_margin"
android:background="@color/primary_dark"
android:fontFamily="@font/slatebook"
android:padding="0dp"
android:text="8"
android:textColor="@color/primary_light"
android:textSize="22sp" />
试试这个。xml处理这一部分。非常感谢!工作得很有魅力。