
也可以重写EditText
package com.mycompany.myeditimport android.content.*
import android.widget.*
import android.graphics.*
import android.util.*
import android.text.*
import android.view.*
public class MyEditText extends EditText
{
private Paint line
public MyEditText(Context context,AttributeSet As){
super(context,As)
setFocusable(true)
line=new Paint()
line.setColor(Color.RED)
line.setStrokeWidth(2)
setPadding(95,0,0,0)
setGravity(Gravity.TOP)
}
@Override
protected void onDraw(final Canvas canvas)
{
// TODO: Implement this metho
if(getText().toString().length()!=0){
float y=0
Paint p=new Paint()
p.setColor(Color.GRAY)
p.setTextSize(40)
for(int l=0l<getLineCount()l++){
y=((l+1)*getLineHeight())-(getLineHeight()/4)
canvas.drawText(String.valueOf(l+1),0,y,p)
canvas.save()
}
}
int k=getLineHeight()
int i=getLineCount()
canvas.drawLine(90,0,90,getHeight()+(i*k),line)
int y=(getLayout().getLineForOffset(getSelectionStart())+1)*k
canvas.drawLine(0,y,getWidth(),y,line)
canvas.save()
canvas.restore()
super.onDraw(canvas)
}
}
参考链接:http://tieba.baidu.com/p/3948623080
在android中可能经常需要用到多行Edittext,代码如下: [html] view plain copy 在EditText里面添加android:minLines="3"即可,但是现实效果如下: 如果想要使输入从顶部开始,可以在xml文件里面添加一句 android:gravity="Top"即可完全按你的要求写的,供参考:
前提是XML文件已创建好,在窗体里选择该XML文件,再行 *** 作:
窗体:
//选择XML按钮private void btnXML_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable()
OpenFileDialog xmlFile = new OpenFileDialog()
xmlFile.Filter = "*.xml|"
xmlFile.Title = "请选择xml文件"
if (xmlFile.ShowDialog() == DialogResult.OK)
{
this.txtPath.Text = xmlFile.FileName//在textBox1控件中显示选择的路径
dt=GetXML(this.txtPath.Text)
}
if(!dt.Equals(null)&&dt.Rows.Count>0)
LoadData(dt, dgvXML)//加载到窗体中
}
//保存按钮
private void button1_Click(object sender, EventArgs e)
{
int n = SaveDgv()
if (n > 0)
{
MessageBox.Show("保存成功!")
DataTable dt = new DataTable()
dt = GetXML(this.txtPath.Text)
LoadData(dt, dgvXML)//刷新加载
}
else
{
MessageBox.Show("保存失败!")
DataTable dt = new DataTable()
dt = GetXML(this.txtPath.Text)
LoadData(dt, dgvXML)//刷新加载
}
}
//删除按钮
private void btnDelete_Click(object sender, EventArgs e)
{
int n = 0//判断是否删除
for (int i = 0 i < dgvXML.SelectedRows.Count i++)
{
string id = dgvXML.SelectedRows[i].Cells[0].Value.ToString()
XmlDocument doc = new XmlDocument()
doc.Load(this.txtPath.Text)
XmlNodeList nod = doc.DocumentElement.ChildNodes
XmlNode root = doc.DocumentElement
foreach (XmlNode peo in nod)
{
if (XmlNode.Equals(peo.SelectSingleNode("ID").InnerText, id))
{
root.RemoveChild(peo)//从根节点删除该ID的PERSON
doc.Save(this.txtPath.Text)
n++
}
}
}
if (n > 0)
{
DataTable dt = new DataTable()
dt = GetXML(this.txtPath.Text)
LoadData(dt, dgvXML)//刷新加载
MessageBox.Show("删除成功!")
}
else
{
MessageBox.Show("删除失败!")
}
}
// DataGridView中加载数据
private void LoadData(DataTable dt, DataGridView dgv)
{
dgv.Rows.Clear()//datagridview清空数据
if (dt != null && dt.Rows.Count > 0)
{
dgv.Rows.Add(dt.Rows.Count)
for (int i = 0 i < dt.Rows.Count i++)
{
for (int k = 0 k < dt.Columns.Count k++)
{
dgv.Rows[i].Cells[k].Value = dt.Rows[i][k].ToString()//赋值
}
}
}
}
//datagridview添加行号
private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{
e.Row.HeaderCell.Value = (e.Row.Index + 1).ToString()
}
//解析XML生成DATATABLE
private List<string> IDList = new List<string>()//用来记录已有的ID,以在修改时判断是否新增
private DataTable GetXML(string path)
{
DataTable dt = new DataTable()
dt.Columns.Add("ID")
dt.Columns.Add("NAME")
dt.Columns.Add("SEX")
dt.Columns.Add("PHONE")
XmlDocument doc = new XmlDocument()
doc.Load(path)
XmlNodeList nod = doc.DocumentElement.ChildNodes
foreach (XmlNode peo in nod)
{
XmlNodeList pe = peo.ChildNodes
DataRow row = dt.NewRow()
foreach (XmlNode p in pe)
{
if (p.Name == "ID")
{
row["ID"] = p.InnerText.ToString()
IDList.Add(p.InnerText.ToString())//添加ID记录,以在修改时判断是否新增
}
if (p.Name == "NAME")
{
row["NAME"] = p.InnerText.ToString()
}
if (p.Name == "SEX")
{
row["SEX"] = p.InnerText.ToString()
}
if (p.Name == "PHONE")
{
row["PHONE"] = p.InnerText.ToString()
}
}
dt.Rows.Add(row)
}
return dt
}
//修改dgv数据后保存到XML文件
private int SaveDgv()
{
int n = 0
for (int i = 0 i < dgvXML.Rows.Count-1 i++)
{
XmlDocument doc = new XmlDocument()
doc.Load(this.txtPath.Text)
XmlNodeList nod = doc.DocumentElement.ChildNodes
string id = dgvXML.Rows[i].Cells[0].Value.ToString()
if (IDList.Contains(id)) //如果是已有的ID,则修改
{
foreach (XmlNode peo in nod)
{
if (XmlNode.Equals(peo.SelectSingleNode("ID").InnerText, id))
{
peo.SelectSingleNode("NAME").InnerText = dgvXML.Rows[i].Cells[1].Value.ToString()//赋值姓名
peo.SelectSingleNode("SEX").InnerText = dgvXML.Rows[i].Cells[2].Value.ToString()//赋值性别
peo.SelectSingleNode("PHONE").InnerText = dgvXML.Rows[i].Cells[3].Value.ToString()//赋值电话
doc.Save(this.txtPath.Text)
n++
break//当找到该ID记录并修改后,跳出循环
}
}
}
else //否则为新增
{
XmlNode root = doc.DocumentElement
XmlElement PERSON = doc.CreateElement("PERSON")
XmlElement ID = doc.CreateElement("ID")
ID.InnerText = id//赋值id
XmlElement NAME = doc.CreateElement("NAME")
NAME.InnerText = dgvXML.Rows[i].Cells[1].Value.ToString()//赋值姓名
XmlElement SEX = doc.CreateElement("SEX")
SEX.InnerText = dgvXML.Rows[i].Cells[2].Value.ToString()//赋值性别
XmlElement PHONE = doc.CreateElement("PHONE")
PHONE.InnerText = dgvXML.Rows[i].Cells[3].Value.ToString()//赋值电话
PERSON.AppendChild(ID)
PERSON.AppendChild(NAME)
PERSON.AppendChild(SEX)
PERSON.AppendChild(PHONE)
root.AppendChild(PERSON)
doc.Save(this.txtPath.Text)//保存
n++
}
}
return n
}
XML文件:
<?xml version="1.0" standalone="yes"?>
<List>
<PERSON>
<ID>001</ID>
<NAME>测一</NAME>
<SEX>男男</SEX>
<PHONE>13543234355</PHONE>
</PERSON>
<PERSON>
<ID>002</ID>
<NAME>再二</NAME>
<SEX>女女</SEX>
<PHONE>13245678903</PHONE>
</PERSON>
<PERSON>
<ID>003</ID>
<NAME>张三</NAME>
<SEX>男男</SEX>
<PHONE>13544678934</PHONE>
</PERSON>
<PERSON>
<ID>005</ID>
<NAME>王五</NAME>
<SEX>女女</SEX>
<PHONE>12345678900</PHONE>
</PERSON>
</List>
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)