setContentView(R.layout.activity_main);//把这句放在代码块的最后一行,就报错,为什么?

本文探讨了在Android开发中,自定义View与布局文件中预设布局之间的冲突问题。通过实例分析,展示了如何在Activity中动态添加自定义View,并解决由此引发的布局显示错误。深入讨论了setContentView调用时机的重要性及其对视图层级的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package mouse.samsung;

import android.support.constraint.ConstraintLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);//把这句放在代码块的最后一行,就报错
    
    //生成自定义的view类对象
    SubView subView = new SubView(this);        
    //xml里的LinearLayout
    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.root_view);
    //视图容器里添加自定义的SubView视图
    linearLayout.addView(subView);

   // setContentView(R.layout.activity_main); 前面的这句注释掉,用这句的话,报错
    //为神么????????????????

}

}

C:\Users\Admin\AndroidStudioProjects\Kucun2\app\src\main\java\com\example\kucun2\ui\moban\MainActivity.java:131: ����: ��Ҫ�������ʽ case R.id.ib_navigation_back: ^ public void onClick(View view) { switch (view.getId()) { case R.id.ib_navigation_back: //返回 finish(); break; case R.id.et_login_username: mEtLoginPwd.clearFocus(); mEtLoginUsername.setFocusableInTouchMode(true); mEtLoginUsername.requestFocus(); break; case R.id.et_login_pwd: mEtLoginUsername.clearFocus(); mEtLoginPwd.setFocusableInTouchMode(true); mEtLoginPwd.requestFocus(); break; case R.id.iv_login_username_del: //清空用户名 mEtLoginUsername.setText(null); break; case R.id.iv_login_pwd_del: //清空密码 mEtLoginPwd.setText(null); break; case R.id.bt_login_submit: //登录 loginRequest(); break; case R.id.tv_login_forget_pwd: //忘记密码 startActivity(new Intent(MainActivity.this, ForgetPwdActivity.class)); break; case R.id.ll_login_pull: mLlLoginPull.animate().cancel(); mLlLoginLayer.animate().cancel(); int height = mLlLoginOptions.getHeight(); float progress = (mLlLoginLayer.getTag() != null && mLlLoginLayer.getTag() instanceof Float) ? (float) mLlLoginLayer.getTag() : 1; int time = (int) (360 * progress); if (mLlLoginPull.getTag() != null) { mLlLoginPull.setTag(null); glide(height, progress, time); } else { mLlLoginPull.setTag(true); upGlide(height, progress, time); } break; case R.id.ib_login_weibo: weiboLogin(); break; case R.id.ib_login_qq: qqLogin(); break; case R.id.ib_login_wx: weixinLogin(); break; default: break; } }帮改一下
06-05
在我给的代码基础上改只要改运算符显示这一块:package com.example.myapplication import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.ArrayAdapter import android.widget.Spinner import android.widget.TextView import android.widget.Toast import com.google.android.material.button.MaterialButton import com.google.android.material.textfield.TextInputEditText class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 初始化UI组件 val num1Input = findViewById<TextInputEditText>(R.id.editTextNumber1) val num2Input = findViewById<TextInputEditText>(R.id.editTextNumber2) val operatorSpinner = findViewById<Spinner>(R.id.spinnerOperator) val calculateBtn = findViewById<MaterialButton>(R.id.buttonCalculate) val resultText = findViewById<TextView>(R.id.textViewResult) // 配置Spinner适配器 val operators = resources.getStringArray(R.array.operators) val adapter = ArrayAdapter( this, android.R.layout.simple_spinner_item, operators ).apply { setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) } operatorSpinner.adapter = adapter operatorSpinner.setSelection(0) // 默认选中第一个运算符 calculateBtn.setOnClickListener { // 获取输入值 val num1Str = num1Input.text.toString() val num2Str = num2Input.text.toString() val operator = operatorSpinner.selectedItem.toString() // 验证输入 if (num1Str.isEmpty() || num2Str.isEmpty()) { Toast.makeText(this, R.string.error_empty, Toast.LENGTH_SHORT).show() return@setOnClickListener } val num1 = num1Str.toDoubleOrNull() val num2 = num2Str.toDoubleOrNull() if (num1 == null || num2 == null) { Toast.makeText(this, R.string.error_invalid, Toast.LENGTH_SHORT).show() return@setOnClickListener } // 执行计算 val result = when (operator) { "+" -> num1 + num2 "-" -> num1 - num2 "*" -> num1 * num2 "/" -> { if (num2 == 0.0) { Toast.makeText(this, R.string.error_divide_zero, Toast.LENGTH_SHORT).show() return@setOnClickListener } num1 / num2 } else -> 0.0 } // 显示结果(保留两位小数) resultText.text = "%.2f".format(result) } } } <!-- 运算符选择下拉菜单 --> <com.google.android.material.textfield.TextInputLayout android:id="@+id/textInputLayoutOperator" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="16dp" android:layout_marginEnd="16dp" app:boxBackgroundMode="outline" app:boxCornerRadiusTopStart="12dp" app:boxCornerRadiusTopEnd="12dp" app:boxStrokeColor="@color/purple_200" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/textInputLayout2"> <com.google.android.material.textfield.MaterialAutoCompleteTextView android:id="@+id/spinnerOperator" android:layout_width="match_parent" android:layout_height="wrap_content" android:entries="@string/result_hint" android:inputType="none" android:padding="8dp" android:textSize="16sp" /> </com.google.android.material.textfield.TextInputLayout>
最新发布
07-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值