Android 应用程序不像在 Android Studio 中那样显示在设备上

Posted

技术标签:

【中文标题】Android 应用程序不像在 Android Studio 中那样显示在设备上【英文标题】:Android Application not displaying on device as it does in Android Studio 【发布时间】:2015-01-28 13:05:25 【问题描述】:

我正在尝试制作一个显示以下图像的程序:

该图像来自我试图显示的活动的 XML 文件的 android Studio 上的“显示”窗口。此窗口包含两个片段,但目前只有其中一个具有可见元素。

但是,当在 android 设备上运行程序时,我只看到一个空白屏幕,没有任何可见的对象或功能,我已经在片段中编程。不过,我仍然可以在顶部看到活动的标题。

应该出现的是底部的两个图标(它们是来自 ToolbarFragment 的两个图像按钮)和一个由 DrawingFragment 中的画布对象占用的空白空间。我还不确定如何绘制画布,但至少按钮应该会出现。

我认为这与 XML 文件或活动本身有关,因此我在下面提供了它们的代码。非常感谢您提供的任何帮助。

DrawingActivity.java

package com.example.chris.drawingtest;

import android.app.Activity;
import android.util.Log;


public class DrawingActivity extends Activity
    implements ToolbarFragment.ToolSelectionListener 

    public void sendNewValue(int newValue) 
        Log.i("Data received from Toolbar Fragment: ", "The ID of the button pressed is " + newValue);
    

activity_drawing.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:orientation="vertical"
    android:layout_gravity="bottom"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".com.example.chris.drawingtest.DrawingActivity">

    <fragment
        android:name="com.example.chris.drawingtest.DrawingFragment"
        android:id="@+id/Drawing"
        android:layout_
        android:layout_
        tools:layout="@layout/fragment_drawing"
    />

    <fragment
        android:name="com.example.chris.drawingtest.ToolbarFragment"
        android:layout_
        android:layout_
        android:id="@+id/Toolbar"
        tools:layout="@layout/fragment_toolbar"
    />

</LinearLayout>

编辑:添加片段代码。

ToolbarFragment.java

package com.example.chris.drawingtest;

import android.app.Activity;
import android.app.Fragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;

import com.example.chris.drawingtest.R;

/**
 * Created by Chris on 11/28/2014.
 */
public class ToolbarFragment extends Fragment 

    ToolSelectionListener mCallback;

    public interface ToolSelectionListener 
        public void sendNewValue(int newValue);
    

    public void clicked(ImageButton imageButton) 
        mCallback.sendNewValue(imageButton.getId());
    

    @Override
    public void onAttach(Activity activity) 
        super.onAttach(activity);
    

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
        return inflater.inflate(R.layout.fragment_toolbar, container, false);
    

    private ImageButton pencilButton = (ImageButton) getActivity().findViewById(R.id.pencil);
    private ImageButton eraserButton = (ImageButton) getActivity().findViewById(R.id.eraser);



DrawingFragment.java

package com.example.chris.drawingtest;

import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.LinearLayout;

import com.example.chris.drawingtest.R;

/**
 * Created by Chris on 11/28/2014.
 */
public class DrawingFragment extends Fragment 

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
        return inflater.inflate(R.layout.fragment_drawing, container, false);
    

    private class DrawView extends View 

        private Path drawpath = new Path();
        private Paint drawpaint = new Paint();
        private Paint canvaspaint;
        private Canvas drawcanvas;
        private Bitmap canvasBitmap;

        private int paintColor = 0xFF000000;    //opaque black for pencil

        public DrawView(Context context) 
            super(context);
            drawpaint.setColor(paintColor);

            drawpaint.setStrokeWidth(10);
            drawpaint.setStyle(Paint.Style.STROKE);
            drawpaint.setStrokeJoin(Paint.Join.ROUND);
            drawpaint.setStrokeCap(Paint.Cap.ROUND);

            canvaspaint = new Paint(Paint.DITHER_FLAG);
        

        protected void OnSizeChanged(int w, int h, int oldw, int oldh) 
            super.onSizeChanged(w,h,oldw,oldh);

            canvasBitmap = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);
            drawcanvas = new Canvas(canvasBitmap);
        

        @Override
        protected void onDraw(Canvas canvas) 
            super.onDraw(canvas);

            drawcanvas.drawBitmap(canvasBitmap,0,0,drawpaint);
            canvas.drawPath(drawpath, drawpaint);
        

        @Override
        public boolean onTouchEvent(MotionEvent event) 
            float touchX = event.getX();
            float touchY = event.getY();

            switch(event.getAction()) 
                case MotionEvent.ACTION_DOWN:
                    drawpath.moveTo(touchX,touchY);
                    break;
                case MotionEvent.ACTION_MOVE:
                    drawpath.lineTo(touchX,touchY);
                    break;
                case MotionEvent.ACTION_UP:
                    drawcanvas.drawPath(drawpath, drawpaint);
                    drawpath.reset();
                    break;
                default:
                    return false;
            
            invalidate();
            return true;
        

    

   Integer value = 0;


【问题讨论】:

你能提供片段的代码吗?你在里面放什么? 完成。如果您还需要什么,请告诉我。 抱歉,“你在那儿放什么?”是不是还有别的意思? 【参考方案1】:

我可能是错的,但activity_drawing.xml 不应该附加到DrawingActivity.java 吗? 看起来 activity_drawing.xml 没有链接到任何东西。

protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drawing);


【讨论】:

我认为这是问题所在,因为在将其添加到 DrawingActivity(添加了 @Override 语句)后,程序立即崩溃,并出现冗长的错误日志。不是我所希望的,但它是一些东西!谢谢你的建议。我仍然是 android 的新手,所以像这样的东西完全会飞过我的雷达。 没问题,很高兴能帮上忙。 :-)

以上是关于Android 应用程序不像在 Android Studio 中那样显示在设备上的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Android Holo Theme 样式的对话框按钮

使 UISearchBar 不像在联系人应用程序中那样滚动

如何像在 iOS 中为 iMessage 一样为 Android 创建贴纸包?

如何在 Android 中像在 Google 地图中一样获得持续的位置更新?

Android 如何像在 iOS 中一样广播 BLE 本地名称?

Android Seekbar 无法删除填充/背景