2013-01-01 31 views
1

我想创建一个记事本。我指的是android sdk提供的示例记事本。我的问题是我未能在editText上绘制多行。我成功运行了该程序,但editText上没有任何显示,甚至更糟的是我无法在其上输入一个字。这是我的代码。感谢您的帮助。在editText上绘制多行

在观点上,我有双重证实我的课程路径。所以,我不认为我的课程路径有任何问题。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:id="@+id/layouteditbottom" 
     android:layout_alignParentBottom="true" 
     android:paddingBottom="18dp" 
     /> 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:paddingBottom="5dp" 
     android:paddingTop="5dp" 
     android:layout_above="@+id/layouteditbottom"> 
     <TextView android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="18sp" 
      android:text="@string/title" 
      android:id="@+id/title_text1" /> 

     <EditText android:id="@+id/title" 
      android:layout_toRightOf="@+id/title_text1"    
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:imeOptions="actionNext" 
      android:textSize="18sp"/> 

     <View xmlns:android="http://schemas.android.com/apk/res/android" 
      class="com.example.apps2.MainActivity$LineEditText" 
      android:id="@+id/body" 
      android:layout_below="@+id/title" 
      android:layout_width="fill_parent" 
      android:layout_height="match_parent" 
      android:background="@android:color/transparent" 
      android:padding="5dp" 
      android:scrollbars="vertical" 
      android:fadingEdge="vertical" 
      android:gravity="top" 
      android:textSize="22sp" 
      android:capitalize="sentences"/> 
    </RelativeLayout> 
</RelativeLayout> 

下面的代码是java。

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main);  

    } 

    public static class LineEditText extends EditText{ 
      // we need this constructor for LayoutInflater 
      public LineEditText(Context context, AttributeSet attrs) { 
       super(context, attrs); 
        mRect = new Rect(); 
        mPaint = new Paint(); 
        mPaint.setStyle(Paint.Style.FILL_AND_STROKE); 
        mPaint.setColor(Color.BLUE); 
      } 

      private Rect mRect; 
      private Paint mPaint;  

      @Override 
      protected void onDraw(Canvas canvas) { 
       //int count = getLineCount(); 

       int height = getHeight(); 
       int line_height = getLineHeight(); 

       int count = height/line_height; 

       if (getLineCount() > count) 
        count = getLineCount();//for long text with scrolling 

       Rect r = mRect; 
       Paint paint = mPaint; 
       int baseline = getLineBounds(0, r);//first line 

       for (int i = 0; i < count; i++) { 

        canvas.drawLine(r.left, baseline + 1, r.right, baseline + 1, paint); 
        baseline += getLineHeight();//next line 
       } 

       super.onDraw(canvas); 
      } 

    } 

} 
+0

你想做什么?想用多线划划文本,或者你想在edittext框中多行? –

+0

我想强调文字。我想创建一个充满线条的背景的记事本。 – edisonthk

+0

如果你已经解决了你的问题,请将答案标记为已接受。不要在你的问题的标题中放置类似“[已解决]”的假标签。 – meagar

回答

0

谢谢大家的回答。我通过从最外层的relativeLayout替换内层relativeLayout来解决它。以下代码是答案。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:id="@+id/layouteditbottom" 
     android:layout_alignParentBottom="true" 
     android:paddingBottom="18dp" 
     /> 

    <RelativeLayout 
     android:id="@+id/toplayout" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingBottom="5dp" 
     android:paddingTop="5dp"   
     android:layout_alignParentTop="true">  
     <TextView android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="18sp" 
      android:text="@string/title" 
      android:id="@+id/title_text1" />      
     <EditText android:id="@+id/title" 
      android:layout_toRightOf="@+id/title_text1"    
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:imeOptions="actionNext" 
      android:textSize="18sp"/> 
     <TextView 
      android:id="@+id/notelist_date" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true"    
      android:paddingRight="10sp"    
      android:textSize="18sp" />  
    </RelativeLayout> 

    <view 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     class="com.example.note1.NoteEdit$LineEditText" 
     android:id="@+id/body" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@+id/layouteditbottom" 
     android:layout_below="@+id/toplayout"  
     android:background="@android:color/transparent" 
     android:capitalize="sentences" 
     android:fadingEdge="vertical" 
     android:gravity="top" 
     android:padding="5dp" 
     android:scrollbars="vertical" 
     android:textSize="22sp" /> 
</RelativeLayout> 
0

使用android:lines="2"固定多线固定单行使用android:singleLine="true"在你的XML你已经使用单行删除,并如示例使用。

更改您的EditText如下图所示

<EditText android:id="@+id/title" 
     android:layout_toRightOf="@+id/title_text1"    
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     //android:singleLine="true" 
     android:lines="2"// fix the multiline limit 2,3,4,5,6,7..... 
     android:imeOptions="actionNext" 
     android:textSize="18sp"/> 

希望这可以帮助你.. !!

+0

谢谢你的回答,但同时我想道歉,我没有把我的问题弄清楚。我想在正文文本上创建一行。 – edisonthk

+0

没有prblm .. !!好你解决了它:) –

3

只需将一个背景图像添加到您的editText并在其上放置线条即可。

编辑

创建自己与TILEMODE设置为重复,像这样的位图绘制:

<?xml version="1.0" encoding="utf-8"?> 
<bitmap 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@[package:]drawable/drawable_resource" 
    android:tileMode="repeat" /> 

对于android:src指定用线和一些空间高度匹配一个线的图像的文字(取决于你的字体大小)。

+1

我想创建一个背景,当我像一些简单的记事本一样向下滚动时,它会移动。 – edisonthk

+0

创建一个BitmapDrawable作为背景,并在该drawable中设置android:tileMode =“repeat”。查看示例的更新答案。 – Ridcully