Это основная деятельность приложения. Но этот код как-то вылетает из моего приложения. Какие изменения должны быть сделаны, чтобы это работало - PullRequest
0 голосов
/ 29 июня 2018

Я учусь программировать пользовательский интерфейс в Android. Я пытаюсь создать приложение с помощью только одной кнопки, при нажатии на которую появляется всплывающая подсказка о том, сколько раз была нажата кнопка.

package com.example.android.dynamicui;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.AppCompatButton;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private int mCount=0;
float den = getResources().getDisplayMetrics().density;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //Linear Layout
    LinearLayout mLayout = new LinearLayout(this);
    mLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT));
    mLayout.setOrientation(LinearLayout.VERTICAL);
    mLayout.setGravity(Gravity.CENTER);

    //Button
    AppCompatButton mButton = new AppCompatButton(this);
    mButton.setText("Click me!");
    LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    buttonParams.setMargins(0,(int)(15*den + 0.5f),0,0);
    mButton.setLayoutParams(buttonParams);
    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mCount++;
            Toast.makeText(getBaseContext(), "You pressed button for "+mCount+" times!" , Toast.LENGTH_SHORT ).show();
        }
    });

    //Adding button to Linear Layout
    mLayout.addView(mButton,buttonParams);
    setContentView(mLayout);
}
}

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Это сбой, потому что я использовал метод getResources () перед onCreate (), который передал нулевое значение в переменную 'den'.

0 голосов
/ 29 июня 2018

Пожалуйста, установите при нажатии на кнопку после того, как макет был установлен, т.е. :-

    public class MainActivity extends AppCompatActivity {

    private int mCount=0;
    float den = getResources().getDisplayMetrics().density;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //Linear Layout
        LinearLayout mLayout = new LinearLayout(this);
        mLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT));
        mLayout.setOrientation(LinearLayout.VERTICAL);
        mLayout.setGravity(Gravity.CENTER);

        //Button
        AppCompatButton mButton = new AppCompatButton(this);
        mButton.setText("Click me!");
        LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        buttonParams.setMargins(0,(int)(15*den + 0.5f),0,0);
        mButton.setLayoutParams(buttonParams);


        //Adding button to Linear Layout
        mLayout.addView(mButton,buttonParams);
        setContentView(mLayout);


mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mCount++;
                Toast.makeText(getBaseContext(), "You pressed button for "+mCount+" times!" , Toast.LENGTH_SHORT ).show();
            }
        });
    }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...