2013-10-10 120 views
0

我正在爲我的應用程序創建拖放功能,現在我只是通過一個教程來讓我習慣於基本知識。我希望能夠在我的真實設備上運行我的應用程序,但版本不支持4.0及更高版本(因爲拖放使用Gridlayout)。但它支持API 8.Gridlayout支持版本低於4.0

我環顧四周,發現人們使用支持v7 gridlayout來支持較小的版本。我如何實現這個到我的應用程序?我得到的錯誤在我的drag_and_drop_app.xml:

<?xml version="1.0" encoding="utf-8"?> 
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:columnCount="2" 
android:columnWidth="300dp" 
android:orientation="vertical" 
android:rowCount="2" 
android:stretchMode="columnWidth" > 

<LinearLayout 
    android:id="@+id/topleft" 
    android:layout_width="160dp" 
    android:layout_height="200dp" 
    android:layout_column="0" 
    android:layout_row="0" 
    android:background="@drawable/shape" > 

    <ImageView 
     android:id="@+id/myimage1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_column="0" 
     android:layout_row="0" 
     android:src="@drawable/ic_launcher" /> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/topright" 
    android:layout_width="160dp" 
    android:layout_height="200dp" 
    android:layout_column="1" 
    android:layout_row="0" 
    android:background="@drawable/shape" > 

    <ImageView 
     android:id="@+id/myimage2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_column="0" 
     android:layout_row="0" 
     android:src="@drawable/ic_launcher" /> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/bottomleft" 
    android:layout_width="160dp" 
    android:layout_height="200dp" 
    android:layout_column="0" 
    android:layout_row="1" 
    android:background="@drawable/shape" > 

    <ImageView 
     android:id="@+id/myimage3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_launcher" /> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/bottomright" 
    android:layout_width="160dp" 
    android:layout_height="200dp" 
    android:layout_column="1" 
    android:layout_row="1" 
    android:background="@drawable/shape" > 

    <ImageView 
     android:id="@+id/myimage4" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_column="0" 
     android:layout_row="0" 
     android:src="@drawable/ic_launcher" /> 
</LinearLayout> 

</GridLayout> 

和Drag_and_Drop_App.java:

package com.example.awesomefilebuilderwidget; 

import android.app.Activity; 
import android.content.ClipData; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.view.DragEvent; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.DragShadowBuilder; 
import android.view.View.OnDragListener; 
import android.view.View.OnTouchListener; 
import android.view.ViewGroup; 
import android.widget.LinearLayout; 

public class Drag_and_Drop_App extends Activity { 
/** Called when the activity is first created. */ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.drag_and_drop_app); 
findViewById(R.id.myimage1).setOnTouchListener(new MyTouchListener()); 
findViewById(R.id.myimage2).setOnTouchListener(new MyTouchListener()); 
findViewById(R.id.myimage3).setOnTouchListener(new MyTouchListener()); 
findViewById(R.id.myimage4).setOnTouchListener(new MyTouchListener()); 
findViewById(R.id.topleft).setOnDragListener(new MyDragListener()); 
findViewById(R.id.topright).setOnDragListener(new MyDragListener()); 
findViewById(R.id.bottomleft).setOnDragListener(new MyDragListener()); 
findViewById(R.id.bottomright).setOnDragListener(new MyDragListener()); 

} 

private final class MyTouchListener implements OnTouchListener { 
public boolean onTouch(View view, MotionEvent motionEvent) { 
    if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { 
    ClipData data = ClipData.newPlainText("", ""); 
    DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view); 
    view.startDrag(data, shadowBuilder, view, 0); 
    view.setVisibility(View.INVISIBLE); 
    return true; 
    } else { 
    return false; 
    } 
    } 
} 

class MyDragListener implements OnDragListener { 
Drawable enterShape = getResources().getDrawable(R.drawable.shape_droptarget); 
Drawable normalShape = getResources().getDrawable(R.drawable.shape); 

@Override 
public boolean onDrag(View v, DragEvent event) { 
    int action = event.getAction(); 
    switch (event.getAction()) { 
    case DragEvent.ACTION_DRAG_STARTED: 
    // do nothing 
    break; 
    case DragEvent.ACTION_DRAG_ENTERED: 
    v.setBackgroundDrawable(enterShape); 
    break; 
    case DragEvent.ACTION_DRAG_EXITED: 
    v.setBackgroundDrawable(normalShape); 
    break; 
    case DragEvent.ACTION_DROP: 
    // Dropped, reassign View to ViewGroup 
    View view = (View) event.getLocalState(); 
    ViewGroup owner = (ViewGroup) view.getParent(); 
    owner.removeView(view); 
    LinearLayout container = (LinearLayout) v; 
    container.addView(view); 
    view.setVisibility(View.VISIBLE); 
    break; 
    case DragEvent.ACTION_DRAG_ENDED: 
    v.setBackgroundDrawable(normalShape); 
    default: 
    break; 
    } 
    return true; 
} 
} 
} 

回答

0

我只是改了行:

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" 

<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android" 

與相應的結尾標籤!

相關問題