Android app not showing on device like in Android Studio
I am trying to create a program that displays the following image:
This image comes from the Display window in Android Studio for the XML file for the activity I am trying to display. This window includes two fragments, although only one of them has visible elements right now.
However, when I run the program on an Android device, I get a blank screen with no visible objects or functionality that I was programming into fragments. I am still getting the activity title at the top though.
What should appear are the two icons at the bottom (which represent the two image buttons from the ToolbarFragment) and an empty space that will be used by the canvas object from the DrawingFragment. I'm not sure how to draw the canvas, but at least the buttons should appear.
I am assuming it has something to do with the XML files or the activity itself, so I have provided the code for them below. Any help you can give would be greatly appreciated.
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_width="wrap_content"
android:layout_height="wrap_content"
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_width="wrap_content"
android:layout_height="wrap_content"
tools:layout="@layout/fragment_drawing"
/>
<fragment
android:name="com.example.chris.drawingtest.ToolbarFragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Toolbar"
tools:layout="@layout/fragment_toolbar"
/>
</LinearLayout>
EDIT: Added snippet code.
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;
}
source to share
I may be wrong, but if the action_drawing.xml is not tied to DrawingActivity.java? It looks like activity_drawing.xml is not associated with anything.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drawing);
}
source to share